Process.Start() 不起作用,除非使用 F10 跳过
Process.Start() does not work unless stepping over using F10
我想启动一个进程使用:
ProcessStartInfo createProject = new ProcessStartInfo();
createProject.FileName = exePath;
createProject.UseShellExecute = false;
createProject.WorkingDirectory = projectDirectory;
createProject.Arguments = exeArguments;
try
{
// Start the process with the info specified.
System.Diagnostics.Process.Start(createProject);
}
catch (IOException eX)
{
// Log error.
MessageBox.Show("Unable to create project", "Error Creating Project");
}
当我在 Process.Start()
行放置断点并继续按 F10 跳过时,过程 运行s 没有任何问题。
然而,当我在断点处按 F5 或 运行 我的应用程序而没有任何断点时,我得到一个 "Your application has stopped working" 对话框,我的应用程序没有抛出任何异常。
我也尝试在 Process.Start()
之前使用 Thread.Sleep()
,但没有结果。
我真的很想知道是什么导致了这个问题。
编辑:检查事件查看器后,我发现故障模块是 MSVCR90.dll。我安装了 9.0.30729.6161 版本。
检查您的事件日志(eventvwr.exe)以查看您正在启动的进程是否遇到任何关键问题。
如果启动的进程也是您的,您可以向其添加日志记录,或者使用 System.Diagnostics.Debugger.Launch() 让它在启动时启动调试器——或者使用 gflags 通过 WinDbg 或类似工具进入它启动时。
这个答案是给那些对解决问题感兴趣的人,而不是对问题本身进行务实讨论的人:
其实答案就在问题本身,我是在@rene 提出一个问题后得到的。
进程在我跳过时运行,因为程序有时间完成它的工作。但是当我按 F5 时它崩溃了,因为进程本身没有完成。我使用了以下代码:
ProcessStartInfo createProject = new ProcessStartInfo();
createProject.FileName = exePath;
createProject.UseShellExecute = false;
createProject.WorkingDirectory = projectDirectory;
createProject.Arguments = exeArguments;
try
{
using (System.Diagnostics.Process exeProcess = System.Diagnostics.Process.Start(createProject ))
{
exeProcess.WaitForExit();
}
}
catch (IOException eX)
{
// Log error.
MessageBox.Show("Unable to create project", "Error Creating Project");
}
这也是它不抛出任何异常的原因。
再次感谢@rene!
我想启动一个进程使用:
ProcessStartInfo createProject = new ProcessStartInfo();
createProject.FileName = exePath;
createProject.UseShellExecute = false;
createProject.WorkingDirectory = projectDirectory;
createProject.Arguments = exeArguments;
try
{
// Start the process with the info specified.
System.Diagnostics.Process.Start(createProject);
}
catch (IOException eX)
{
// Log error.
MessageBox.Show("Unable to create project", "Error Creating Project");
}
当我在 Process.Start()
行放置断点并继续按 F10 跳过时,过程 运行s 没有任何问题。
然而,当我在断点处按 F5 或 运行 我的应用程序而没有任何断点时,我得到一个 "Your application has stopped working" 对话框,我的应用程序没有抛出任何异常。
我也尝试在 Process.Start()
之前使用 Thread.Sleep()
,但没有结果。
我真的很想知道是什么导致了这个问题。
编辑:检查事件查看器后,我发现故障模块是 MSVCR90.dll。我安装了 9.0.30729.6161 版本。
检查您的事件日志(eventvwr.exe)以查看您正在启动的进程是否遇到任何关键问题。
如果启动的进程也是您的,您可以向其添加日志记录,或者使用 System.Diagnostics.Debugger.Launch() 让它在启动时启动调试器——或者使用 gflags 通过 WinDbg 或类似工具进入它启动时。
这个答案是给那些对解决问题感兴趣的人,而不是对问题本身进行务实讨论的人:
其实答案就在问题本身,我是在@rene 提出一个问题后得到的。
进程在我跳过时运行,因为程序有时间完成它的工作。但是当我按 F5 时它崩溃了,因为进程本身没有完成。我使用了以下代码:
ProcessStartInfo createProject = new ProcessStartInfo();
createProject.FileName = exePath;
createProject.UseShellExecute = false;
createProject.WorkingDirectory = projectDirectory;
createProject.Arguments = exeArguments;
try
{
using (System.Diagnostics.Process exeProcess = System.Diagnostics.Process.Start(createProject ))
{
exeProcess.WaitForExit();
}
}
catch (IOException eX)
{
// Log error.
MessageBox.Show("Unable to create project", "Error Creating Project");
}
这也是它不抛出任何异常的原因。
再次感谢@rene!