Tengo la siguiente aplicación trivial C# que simplemente intenta iniciar "jconsole.exe", que en mi máquina se encuentra en C: \ Programs \ jdk16 \ bin.Process.Start() y variable de entorno PATH
using System;
using System.Diagnostics;
namespace dnet {
public class dnet {
static void Main(string[] args) {
try {
Process.Start("jconsole.exe");
Console.WriteLine("Success!");
} catch (Exception e) {
Console.WriteLine("{0} Exception caught.", e);
}
}
}
}
Si mi variable de entorno PATH se establece en
c:\windows;c:\windows\sytem32;c:\programs\jdk16\bin
funciona perfectamente. Sin embargo, si la variable de entorno PATH se establece en
c:\windows;c:\windows\sytem32;c:\\programs\jdk16\bin
(tenga en cuenta las dos barras invertidas entre "C" y "programas"), se produce un error con una excepción win32.
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at dnet.dnet.Main(String[] args)
Curiosamente, en la misma línea de comandos cuando ejecuto el programa .NET y consigo la excepción, puedo simplemente escriba "jconsole.exe", y el programa se iniciará. Parece que Windows no tiene problemas para encontrar el ejecutable con la doble barra invertida en la RUTA, pero Process.Start() sí lo hace.
¿Por qué la barra invertida adicional en la RUTA causa problemas y cómo puedo solucionar el problema? No sé dónde se ubicará el ejecutable que quiero llamar en tiempo de ejecución, así que prefiero confiar en la variable PATH.
Hay dos formas de iniciar un archivo EXE, que está probando en ambos sentidos. Su aplicación utiliza ShellExecuteEx(), el intérprete de línea de comandos usa CreateProcess(). Puede jugar con la propiedad ProcessStartInfo.UseShellExecute. No tiene mucho sentido preocuparse por cómo interpretan la variable de entorno PATH de forma diferente, ya sabe cómo solucionar el problema. –