¿Cómo ejecuto archivos en C #

-Edit- 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í.

Busqué y encontré este Windows: Listar y lanzar aplicaciones asociadas con una extensión, pero no respondió mi pregunta. Con ajustes a continuación, surgió el siguiente. Sin embargo, se queda atascado en los archivos de imagen. Los archivos Txt funcionan bien

Pronto actualizaré este código para dar cuenta de las rutas de las aplicaciones con espacios, pero no entiendo por qué los archivos de imágenes 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(); } } } 

Utilizar:

 System.Diagnostics.Process.Start(filePath); 

Utilizará el progtwig predeterminado que se abrirá como si acabaras de hacer clic en él. Es cierto que no le permite elegir el progtwig 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.

Realmente parece que estás buscando más esto:

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

Suponiendo que solo desea iniciar archivos que ya tienen algunas aplicaciones asociadas (por ejemplo: * .txt está asociado 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, la imagen se abre en Windows Picture & Fax Viewer ya que es la aplicación predeterminada para los archivos * .jpg.