waitforexit visual studio start example ejemplos c# process

visual - El código C#no lanzará programas. Win32Exception no fue manejado



system.diagnostics.process c# example (4)

Estoy haciendo un programa que lanza un programa cuando se hace clic en un botón. Parece funcionar para programas como Chrome o Word pero no para programas más pequeños como fraps y me da el error

Se produjo una excepción no controlada del tipo ''System.ComponentModel.Win32Exception'' en System.dll Información adicional: El sistema no puede encontrar el archivo especificado

private void Fraps_Click(object sender, EventArgs e) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "fraps.exe"; Process.Start(startInfo); }


En mi humilde opinión, puede llamar a cualquier programa que tenga una entrada de ruta en el entorno. Aquí, no estamos seguros si el exe existe en el directorio bin de la aplicación en ejecución. Podría haber intentado con la ruta completa, no habría obtenido la excepción

Sugeriría que pueda arrancar el exe como parte de su aplicación, ya que no forma parte de Windows o podría indicarle al usuario que la ruta esté en variables de entorno.


Windows no sabe qué es "fraps.exe" y no puede encontrar un archivo ejecutable en las carpetas en las que se le dice que debe buscar.

Vamos a verificar esto Abra un símbolo del sistema y escriba "fraps.exe". No debería importar dónde está tu directorio actual; la carpeta de inicio debería funcionar bien.

Siempre que no haya instalado fraps en su carpeta de inicio, esto es lo que debería ver. Ahora, ¿por qué funcionaría esto para "chrome.exe" (presumiblemente, no es el caso en mi sistema) pero no fraps?

Detrás de escena, se le dice a Windows que mire en varias carpetas cuando escribe comandos. Puede ver la lista completa si escribe SET en el mensaje y busca la PATH .

Eso es un poco desordenado, pero es donde Windows buscará el programa que desea luego de buscar en el directorio actual.

En este caso, Windows no puede encontrar "fraps.exe" en el directorio actual (su carpeta bin/Debug ) o cualquiera de las carpetas en PATH. Entonces levanta las manos y dice: The system cannot find the file specified .

Tienes dos opciones para arreglar esto:

Uno: use el nombre completo de la ruta. Si sabe dónde está instalado fraps, puede usar el nombre completo de la ruta del ejecutable, como por ejemplo:

startInfo.FileName = @"c:/Program Files/Fraps/fraps.exe";

Dos: agregue la carpeta de instalación fraps a la variable de entorno PATH . Esto es más complicado y complicado, pero usted más o menos agrega la ruta que fraps en instalado a la variable PATH. Puedes hacer esto o confiar en el usuario final para hacer esto (aunque eso no me parece una buena idea).

Ambas opciones requieren que se sepa dónde está instalado fraps, por lo que es una buena idea codificar el valor (si este programa es solo para usted) o pedirle al usuario la ruta de instalación al iniciar / instalar el programa.


Citando desde MSDN :

Debe establecer al menos la propiedad FileName antes de comenzar el proceso. El nombre del archivo es cualquier aplicación o documento. Un documento se define como cualquier tipo de archivo que tenga una acción abierta o predeterminada asociada a él. Puede ver los tipos de archivos registrados y sus aplicaciones asociadas para su computadora utilizando el cuadro de diálogo Opciones de carpeta, que está disponible a través del sistema operativo. El botón Avanzado lleva a un cuadro de diálogo que muestra si hay una acción abierta asociada con un tipo de archivo registrado específico.

En su caso fraps.exe no es una aplicación asociada al tipo de archivo registrado. Así que da FULL PATH a fraps.exe

El ejemplo de código sería similar al siguiente (Encuentre la instalación de fraps en su disco duro y reemplace la ruta a fraps.exe en la segunda línea)

ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = @"C:/Program Files/fraps/fraps.exe"; // Your absolute PATH Process.Start(startInfo);


Si el exe que llamarás es de 32 bits, entonces tu código también debe ser de 32 bits. AnyCpu o 64 bits da ese error.