c# - imprimir - ¿Cómo abro un archivo usando el controlador predeterminado del shell?
imprimir pdf desde c# (3)
Nuestro cliente (una aplicación winforms) incluye un buscador de archivos. Me gustaría que el usuario pueda abrir el archivo seleccionado utilizando el controlador predeterminado del shell. ¿Cómo puedo hacer eso? He leído que debería usar la API de Win32 en lugar del registro, pero preferiría una solución que involucre solo .NET.
EDIT: respuesta más nueva, más simple.
De hecho, puedes usar Process.Start(filename)
. Esto se especifica en los documentos para Process.Start
:
Iniciar un proceso especificando su nombre de archivo es similar a escribir la información en el cuadro de diálogo Ejecutar del menú Inicio de Windows. Por lo tanto, el nombre del archivo no necesita representar un archivo ejecutable. Puede ser de cualquier tipo de archivo para el que la extensión se haya asociado con una aplicación instalada en el sistema. Por ejemplo, el nombre del archivo puede tener una extensión .txt si tiene archivos de texto asociados con un editor, como el Bloc de notas, o puede tener un .doc si tiene archivos.doc asociados con una herramienta de procesamiento de textos, como Microsoft Word. De manera similar, de la misma manera que el cuadro de diálogo Ejecutar puede aceptar un nombre de archivo ejecutable con o sin la extensión .exe, la extensión .exe es opcional en el parámetro fileName. Por ejemplo, puede establecer el parámetro fileName en "Notepad.exe" o "Notepad".
EDITAR: Original, respuesta complicada:
Si usa Process.Start
con el archivo como "ejecutable" y especifica UseShellExecute = true
, simplemente funcionará. Por ejemplo:
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
ProcessStartInfo psi = new ProcessStartInfo("test.txt");
psi.UseShellExecute = true;
Process.Start(psi);
}
}
Eso abre test.txt en el Bloc de notas.
De hecho, UseShellExecute=true
es el valor predeterminado, pero como definitivamente se requiere, me gusta especificarlo explícitamente para que sea más claro para el lector.
System.Diagnostics.Process proporciona el envoltorio nativo de .Net alrededor de shell32.ShellExecute.
Vea PInvoke.Net para una discusión de ambas API y documentos de MSDN en MSDN .
no estoy seguro si está bien
System.Diagnostics.Process.Start(filePath);