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

C# 仅在使用Process.Start时出现应用程序错误,c#,.net,process,system.diagnostics,C#,.net,Process,System.diagnostics,在我们的系统中,我们监控的是一个我们几乎无法控制的第三方可执行文件,我们称之为server.exe。我相信它是用C++ Builder构建的。有时服务器会出现错误,我们需要终止并重新启动它。我正在编写一些C#代码来自动执行此操作,但当我使用Process.start()启动server.exe时,服务器上会出现一个错误对话框,说明“外部异常E0434F4D” 从资源管理器或命令行启动服务器时,没有错误。我还尝试在VisualStudio2010中以调试模式启动进程,也没有错误。除了Process

在我们的系统中,我们监控的是一个我们几乎无法控制的第三方可执行文件,我们称之为server.exe。我相信它是用C++ Builder构建的。有时服务器会出现错误,我们需要终止并重新启动它。我正在编写一些C#代码来自动执行此操作,但当我使用
Process.start()
启动server.exe时,服务器上会出现一个错误对话框,说明“外部异常E0434F4D”

从资源管理器或命令行启动服务器时,没有错误。我还尝试在VisualStudio2010中以调试模式启动进程,也没有错误。除了
Process.Start
,我还尝试了P/Invoke调用
ShellExecute
CreateProcess
,结果相同。是否有其他方法可以从.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找到时,我创建了一个非常小的C++程序作为中间程序。
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  ShellExecuteA(NULL, "open", lpCmdLine, "", "", SW_NORMAL);
  return 0;
}
#包括
int APICENTRY WinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPSTR lpCmdLine、int nCmdShow)
{
ShellExecuteA(空,“打开”,lpCmdLine,“,”,SW_正常);
返回0;
}
使用服务器.exe的
Run.exe运行此命令行,程序将在没有任何错误的情况下启动。从.Net运行相同的命令行会导致与以前相同的错误对话框



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

这是我刚刚启动的记事本启动器。它很好用

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();
        }
    }
}

哦,真傻。经过大量测试和故障排除,我能够隔离问题。这与过程无关。毕竟,开始吧。当我们检测到新进程已经启动时,我们打开一个到它的Telnet连接来查询它的状态。如果过早完成,将显示错误消息。好的,谢谢你让我全程关注。

听起来像是权限问题。我尝试以管理员身份运行我的应用程序,结果相同。还有什么我可以试试的吗?大概你试过运行notepad.exe作为测试?你确定你的EXE可以找到它的所有依赖项(DLL)吗?您还可以尝试在WinDBG下运行应用程序,并让它与EXE的所有者联系以获得支持。给他发一个测试程序来重现这个问题,运行记事本就可以了。我非常确定exe可以找到所有DLL,从Explorer中的安装文件夹运行它可以很好地工作,我在从应用程序运行它时设置了工作目录。“初始错误”对话框后,exe继续运行,似乎工作正常。使用
Process.Start()
启动记事本对我们的应用程序也很好。@Anlo那么可能是您的文件路径或参数有问题。我真的不这么认为,在调试模式下单步执行代码时,exe启动正常,没有任何错误。