2012-04-16 28 views
39

Quiero pedir ayuda para abrir un archivo desde la aplicación C# con la aplicación asociada. He intentado esto:Abrir archivo con la aplicación asociada

 ProcessStartInfo pi = new ProcessStartInfo(file); 
     pi.Arguments = Path.GetFileName(file); 
     pi.UseShellExecute = true; 
     pi.WorkingDirectory = Path.GetDirectoryName(file); 
     pi.FileName = file; 
     pi.Verb = "OPEN"; 
     Process.Start(pi); 

o esto:

 Process.Start(file); 

en cadena file en ambos ejemplos representa ruta completa al archivo que intenta abrir. Ahora, todo funciona bien, excepto las imágenes (jpg) con la aplicación ACDSee. Las asociaciones de Irfanview funcionan bien, los documentos de la oficina de MS también. Después de intentar abrir la imagen jpg asociada con acdsee, solo ejecuta el acdsee en el área de notificación y no abre el archivo.

he descubierto, que en el registro CLASSES_ROOT de imágenes * .jpg, hay un valor ACDSee.JPG como aplicación asociada, y en esta clave no está en concha:> Abierta> Comandoun camino :

"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde 

y que me extraña que este /dde es la razón, ¿por qué no puedo abrir el archivo. Me di cuenta de que en el mismo reg clave Shell-> Abrir hay alguna DDEExec clave de entrada con el valor [open("%1")]

Por Irfan vista u otra aplicación para comprobar que no hay un ddeexec, sólo el comando normal como

"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1" 

que se puede ejecutar desde la línea de comandos después de la swaping% 1 para el nombre del archivo , pero no podía ejecutar el comando desde la entrada ACDSee en la línea de comandos :(

Así que mi pregunta es, ¿cómo puedo configurar el ProcessStartInfo objeto a asegúrese de que ejecutará todos los archivos como lo haría en el explorador mediante doubleclick, los estándares y esto DDEExec? ¿Hay algo más como DDEExec que deba tener en cuenta? gracias y lo siento por mi ES

Respuesta

79

Sólo tiene que escribir

System.Diagnostics.Process.Start(@"file path"); 

ejemplo

System.Diagnostics.Process.Start(@"C:\foo.jpg"); 
System.Diagnostics.Process.Start(@"C:\foo.doc"); 
System.Diagnostics.Process.Start(@"C:\foo.dxf"); 
... 

y Shell se ejecutará el programa asociado a leerlo desde el registro, como de costumbre hace doble click.

+2

Parece que ya lo intentó con 'Process.Start (file);'. –

+0

"Así que mi pregunta, ¿cómo puedo configurar el objeto ProcessStartInfo para asegurarme de que ejecutará todos los archivos como lo haría en el explorador haciendo doble clic?": La respuesta es esa. Usó argumentos de línea de comando, lo que sea ... pero no invocación directa, tanto como yo veo. – Tigran

+0

@Tigran Mario tiene razón, mientras escribía intenté su sugerencia como el segundo ejemplo ... Quería hacer mi pregunta de manera que claramente esta no es la solución correcta, ¡ya que no se abre el jpg! – Zavael

9

Este es un tema antiguo, pero por si acaso alguien lo encuentra como yo lo hice. pi.FileName debe establecerse en el nombre del archivo (y posiblemente en la ruta completa del archivo) del ejecutable que desea utilizar para abrir el archivo. El siguiente código funciona para que abra un archivo de video con VLC.

string file = files[currentIndex].fileName; 
ProcessStartInfo pi = new ProcessStartInfo(file); 
pi.Arguments = Path.GetFileName(file); 
pi.UseShellExecute = true; 
pi.WorkingDirectory = Path.GetDirectoryName(file); 
pi.FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe"; 
pi.Verb = "OPEN"; 
Process.Start(pi); 

obras respuesta de Tigran pero utilizará la aplicación por defecto de Windows para abrir el archivo, por lo que usar ProcessStartInfo puede ser útil si desea abrir el archivo con una aplicación que no es el predeterminado.

+3

(: un comentario sobre una respuesta anterior a un hilo viejo :) La respuesta de Tigran ejecuta el último programa asociado para las extensiones de cada archivo. La respuesta de Tree lo obliga a utilizar ** vlc .exe **. La pregunta de Zavael es acerca de los problemas que tiene "solo" con ** ACDSee.exe ** y cómo establece su asociación de extensión. Creo que los autores de ACDSee deben ser contactados al respecto. –

Cuestiones relacionadas