除非使用F10单步执行,否则Process.Start()不起作用

时间:2015-10-21 12:26:13

标签: c# processstartinfo

我想使用以下方式开始一个流程:

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继续跳过时,该过程运行没有任何问题。

但是当我在断点处按F5或者在没有任何断点的情况下运行我的应用程序时,我得到一个“你的应用程序已停止工作”对话框,而我的应用程序没有抛出任何异常。

我还尝试在没有结果的Thread.Sleep()之前使用Process.Start()

我真的很想知道导致这个问题的原因。

编辑:检查事件查看器后,我看到错误模块是MSVCR90.dll。我安装了9.0.30729.6161版本。

2 个答案:

答案 0 :(得分:1)

这个答案是针对那些对问题的解决方案感兴趣的人而不是对问题本身的务实讨论:

实际上答案就在于问题本身,我在@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!

答案 1 :(得分:0)

检查您的事件日志(使用eventvwr.exe),看看您启动的进程是否正在发生任何重要事件。

如果启动的进程也是你的,你可以添加日志,或者使用System.Diagnostics.Debugger.Launch()让它在启动时启动调试器 - 或者使用gflags通过WinDbg或类似方法进入在启动时。