我有以下功能:
public static void ExecuteNewProcess(string fileToExecute, Action<string> writeToConsole)
{
ProcessStartInfo startInfo = new ProcessStartInfo(fileToExecute);
Process processToExecute = new Process();
startInfo.UseShellExecute = true;
processToExecute.StartInfo = startInfo;
if (!File.Exists(fileToExecute))
{
throw new FileNotFoundException("File not found for execution");
}
if (processToExecute.Start())
{
Thread.Sleep(6000);
Process[] procs = Process.GetProcesses();
if (IsProcessOpen(Path.GetFileNameWithoutExtension(fileToExecute)))
{
writeToConsole(fileToExecute + " launched successfully...");
}
else
{
writeToConsole(fileToExecute + " started but not found.");
throw new Exception("Application started butnot found running...Delay = 6000, File Name = " + Path.GetFileNameWithoutExtension(fileToExecute));
}
}
else
{
writeToConsole("Error Launching application: " + fileToExecute);
throw new Exception("Application did not launch " + fileToExecute);
}
}
private static bool IsProcessOpen(string name)
{
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Contains(name))
{
return true;
}
}
return false;
}
所以问题是,有时我试图用这个函数启动的应用程序没有启动(它启动了大约 80% 的时间)。但是,我确实检查了代码的一部分,以确保它启动并输出。我不知道为什么它没有开始。当我看到它没有启动时,我双击该应用程序以确保它是一个有效的 exe。它总是很好,而且开始很好。我也尝试过使用外壳而不是使用外壳。没有不同。
我认为 processToExecute 在应用程序一直成功启动之前就被清理了。不过只是猜测。
我提前感谢您的帮助。
我睡了几觉,看看是不是发生得太快了。