2009-05-01 20 views
25

Nuestro cliente (una aplicación de 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.¿Cómo abro un archivo usando el controlador predeterminado del shell?

Respuesta

54

EDIT: reciente, la respuesta más simple.

Puede simplemente usar Process.Start(filename). Esto se especifica en la docs for Process.Start:

Inicio de un proceso por el que especifica el nombre del archivo es similar a escribir la información en el cuadro de diálogo Ejecutar de el menú Inicio de Windows. Por lo tanto, el nombre de archivo no necesita representar un archivo ejecutable. Puede ser de cualquier tipo de archivo para el que se haya asociado la extensión con una aplicación instalada en el sistema. Por ejemplo el nombre del archivo puede tener una extensión .txt si ha asociado texto archivos con un editor, como el Bloc de notas, o puede tener un .doc si tiene archivos associated.doc con una herramienta de procesamiento de textos , como Microsoft Word. Del mismo modo, 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 "Bloc de notas".

EDIT: original, respuesta complicada:

Si utiliza Process.Start con el archivo como el "ejecutable" y especificar UseShellExecute = true que sólo va a 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); 
    } 
} 

Esto abre test.txt en el Bloc de notas.

De hecho, UseShellExecute=true es el valor predeterminado, pero como es definitivamente necesario, me gusta especificarlo explícitamente para que el lector lo tenga más claro.

+0

'Process.Start (" C: \ temp \ test.xlsx ");' abra un *** archivo xlsx *** si ** Excel está instalado **. Si no está instalado, no sé. – Kiquenet

6

no está seguro de si está bien

System.Diagnostics.Process.Start(filePath); 
2

System.Diagnostics.Process proporciona el contenedor nativo .Net alrededor de shell32.ShellExecute.

Consulte PInvoke.Net para obtener una descripción de ambas API y documentos de MSDN en MSDN.

Cuestiones relacionadas