2009-08-16 24 views
19

? Editar - Me siento como un idiota. Tenía la sensación de que la respuesta siguiente funcionaría pero no veía ningún resultado de Google similar a las respuestas a continuación. Entonces, cuando vi este código complejo, pensé que tenía que ser así.¿Cómo puedo abrir archivos en C#

He buscado y encontrado este Windows: List and Launch applications associated with an extension sin embargo, no contestó mi pregunta. Con ajustes a continuación, surgió el siguiente. Sin embargo, se queda atascado en los archivos de imagen. Txt archivos funcionan bien

Voy a actualizar este código pronto para dar cuenta de las rutas de las aplicaciones con espacios sin embargo, no entiendo por qué los archivos de imagen no se inician.

static void launchFile(string fn) 
{ 
    //majority was taken from 
    //https://stackoverflow.com/questions/24954/windows-list-and-launch-applications-associated-with-an-extension 
    const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}"; 
    const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command"; 

    string ext = Path.GetExtension(fn); 

    var extPath = string.Format(extPathTemplate, ext); 

    var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string; 
    if (!string.IsNullOrEmpty(docName)) 
    { 
     // 2. Find out which command is associated with our extension 
     var associatedCmdPath = string.Format(cmdPathTemplate, docName); 
     var associatedCmd = Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string; 

     if (!string.IsNullOrEmpty(associatedCmd)) 
     { 
      //Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext); 
      var p = new Process(); 
      p.StartInfo.FileName = associatedCmd.Split(' ')[0]; 
      string s2 = associatedCmd.Substring(p.StartInfo.FileName.Length + 1); 
      s2 = s2.Replace("%1", string.Format("\"{0}\"", fn)); 
      p.StartInfo.Arguments = s2;//string.Format("\"{0}\"", fn); 
      p.Start(); 
     } 
    } 
} 
+0

¿solo desea iniciar archivos en Windows? –

+0

¿Qué sucede con esos archivos de imagen si intenta escribir lo que sea que la instrucción de depuración resultante sea para ellos solo en la línea de comando? –

Respuesta

75

Uso:

System.Diagnostics.Process.Start(filePath); 

Se utilizará el programa predeterminado que se abrió como si acaba de hacer clic en él. Es cierto que no le permite elegir el programa que se ejecutará ... pero suponiendo que desea imitar el comportamiento que se utilizaría si el usuario hiciera doble clic en el archivo, esto debería funcionar.

+4

Aww, * solo * vencerme :) –

+0

jajaja Estaba a punto de escribir lo mismo :-) lol –

+0

qué tal si quisiera abrirlo con un programa específico, quiero abrirlo con "Windows PowerShell ISE" –

10

Realmente suena como usted está buscando más por esto:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
proc.EnableRaisingEvents = false; 
proc.StartInfo.FileName = "<whatever>"; 
proc.Start(); 
2

Suponiendo que lo que desea poner en marcha los archivos que ya tienen algunas aplicaciones asociadas (por ejemplo: * .txt se asocia con el bloc de notas), Use System.Diagnostics.Process.

p. Ej. :

using System.Diagnostics; 
    Process p = new Process(); 
    ProcessStartInfo pi = new ProcessStartInfo(); 
    pi.UseShellExecute = true; 
    pi.FileName = @"MY_FILE_WITH_FULL_PATH.jpg"; 
    p.StartInfo = pi; 

    try 
    { 
     p.Start(); 
    } 
    catch (Exception Ex) 
    { 
     //MessageBox.Show(Ex.Message); 
    } 

Nota: En mi PC, el PIC se abre en Windows Picture & Fax Viewer ya que es la aplicación por defecto para archivos * .jpg.

Cuestiones relacionadas