【问题标题】:Process.Start() does not work unless stepping over using F10除非使用 F10 跨步,否则 Process.Start() 不起作用
【发布时间】:2015-10-21 12:26:13
【问题描述】:

我想使用以下方法启动一个进程:

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 或仅在没有任何断点的情况下运行我的应用程序时,我得到一个“您的应用程序已停止工作”对话框,而我的应用程序没有抛出任何异常。

我也尝试在Process.Start() 之前使用Thread.Sleep(),但没有结果。

我真的很想知道是什么导致了这个问题。

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

【问题讨论】:

  • 这取决于进程正在做什么以及exePathprojectDirectoryexeArguments 的值。我们无法为您复制此内容。
  • 请注意,您只会捕获IOException 异常,因此其他任何事情都可能使您的应用崩溃。
  • @Lati 之前的所有 cmets 都是合理的。如果你问一个好的和明确的问题,你就不会发生这样的事情。恐怕我们真的无法通过心灵感应推断出正在发生的事情:)
  • 然后,您的实际问题并不能通过捕获所有异常来解决。如果它在您单步执行时有效,但如果您在没有暂停的情况下运行它,那么例如您的代码中的某些东西正在执行,它只会在一段时间后完成。我想帮助您分析那个,而不是通过捕获所有异常来掩盖实际问题。为了分析实际问题,需要您提供更多输入。我不是“来这里只是为了写负面的 cmets”,我来这里是为了帮助人们解决独特的问题。为此,您需要合作。
  • @Lati 不,如果这里的每个人都这样做,这个网站就会变得像 Yahoo Answers 一样无用。帖子指南不是秘密,任何人都可以在帮助中找到它们。现在让我们停止争论并编辑您在问题答案下方的评论中留下的信息,并尝试获取完整的堆栈跟踪以及确切的错误和事件日志消息并添加。

标签: c# processstartinfo


【解决方案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!

【讨论】:

    【解决方案2】:

    检查您的事件日志(使用 eventvwr.exe)以查看您正在启动的进程是否遇到任何关键问题。

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

    【讨论】:

    • 这不是答案,而是评论。
    • 因此,如果我将其表述为“是的,我遇到了这个问题 - 这些是我用来解决它的技术”会更好吗?
    • @TimBarrass 根据事件查看器,MSVCR90.dll 似乎有问题。我想启动的进程不是我的,我只有可执行文件。
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多