Tengo un archivo .exe que debe ejecutarse después de crear un archivo. El archivo se creó con éxito y estoy usando el siguiente código para ejecutar el archivo .exe después de eso:
ProcessStartInfo processInfo = new ProcessStartInfo(); processInfo.FileName = pathToMyExe; processInfo.ErrorDialog = true; processInfo.UseShellExecute = false; processInfo.RedirectStandardOutput = true; processInfo.RedirectStandardError = true; Process proc = Process.Start(processInfo); También probé con un simple Process.Start(pathToMyExe); pero el archivo .exe no se ejecuta. Cuando intento pathToMyExe manualmente en mi Explorador de Windows , el programa se ejecuta correctamente. Pero no a través del programa. Lo que veo es que el cursor vuelve a esperar unos segundos y luego vuelve a la normalidad. Así que tampoco hay excepciones lanzadas. ¿Qué está bloqueando el archivo?
No está configurando la ruta del directorio de trabajo y, a diferencia de cuando inicia la aplicación a través del Explorador, no se configura automáticamente en la ubicación del ejecutable.
Solo haz algo como esto:
processInfo.WorkingDirectory = Path.GetDirectoryName(pathToMyExe);(suponiendo que los archivos de entrada, DLL, etc. estén en ese directorio)
private void Print(string pdfFileName) { string processFilename = Microsoft.Win32.Registry.LocalMachine .OpenSubKey("Software") .OpenSubKey("Microsoft") .OpenSubKey("Windows") .OpenSubKey("CurrentVersion") .OpenSubKey("App Paths") .OpenSubKey("AcroRd32.exe") .GetValue(string.Empty).ToString(); ProcessStartInfo info = new ProcessStartInfo(); info.Verb = "print"; info.FileName = processFilename; info.Arguments = string.Format("/p /h {0}", pdfFileName); info.CreateNoWindow = true; info.WindowStyle = ProcessWindowStyle.Hidden; ////(It won't be hidden anyway... thanks Adobe!) info.UseShellExecute = false; Process p = Process.Start(info); p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; int counter = 0; while (!p.HasExited) { System.Threading.Thread.Sleep(1000); counter += 1; if (counter == 5) { break; } } if (!p.HasExited) { p.CloseMainWindow(); p.Kill(); } }Debido a los diferentes directorios de trabajo, debe configurar su directorio de trabajo correctamente en la ruta en la que desea que comience su proceso.
Un ejemplo de demostración de esto puede ser:
Process process = new Process() { StartInfo = new ProcessStartInfo(path, "{Arguments If Needed}") { WindowStyle = ProcessWindowStyle.Normal, WorkingDirectory = Path.GetDirectoryName(path) } }; process.Start();