仅在使用Process.Start时出现应用程序错误

时间:2012-11-12 11:08:38

标签: c# .net process system.diagnostics

在我们的系统中,我们正在监视一个我们几乎无法控制的第三方可执行文件,我们称之为TheServer.exe。我相信它是用C ++ Builder构建的。有时TheServer行为不端,我们需要杀死并重新启动它。我正在编写一些C#代码来自动执行此操作,但是当我使用Process.Start()启动TheServer.exe时,我从TheServer收到一个错误对话框,说明“外部异常E0434F4D”。

从资源管理器或命令行启动TheServer时,没有错误。我还尝试在Visual Studio 2010中以调试模式启动该过程,也没有错误。除Process.Start之外,我已尝试使用相同结果的P / Invoke调用ShellExecuteCreateProcess。还有其他方法可以从.Net开始这个过程吗?

我现在使用的代码:

const string path = @"C:\Program files\TheServer\TheServer.exe";
ProcessStartInfo psi = new ProcessStartInfo()
{
  FileName = path,
  WorkingDirectory = Path.GetDirectoryName(path),
  UseShellExecute = true, // Tried false as well
};
Process.Start(psi);

编辑:当Hans Passant找到this answer时,我创建了一个非常小的C ++程序作为中间人。

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  ShellExecuteA(NULL, "open", lpCmdLine, "", "", SW_NORMAL);
  return 0;
}

使用Run.exe TheServer.exe从命令行运行此程序,程序启动时没有任何错误。从.Net运行相同的命令行会产生与以前相同的错误对话框。


编辑:This question与我的非常相似,但我不使用Xenocode Postbuild,我相信这只是问题的一部分。但正如我所建议的那样,我尝试单步执行代码,然后exe就会毫无错误地启动。确实很奇怪。

2 个答案:

答案 0 :(得分:0)

这是我刚刚旋转的记事本发射器。它工作正常

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            Process process = new Process();
            process.StartInfo.FileName = "notepad";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;

            process.Start();
        }
    }
}

答案 1 :(得分:0)

哦,多么傻。经过大量的测试和故障排除后,我能够找出问题所在。毕竟它与Process.Start无关。当我们检测到新进程已经启动时,我们打开一个Telnet连接来查询它的状态。如果过早完成,则会显示错误消息。好吧,谢谢你让我关注整个过程。

相关问题