在我们的系统中,我们正在监视一个我们几乎无法控制的第三方可执行文件,我们称之为TheServer.exe。我相信它是用C ++ Builder构建的。有时TheServer行为不端,我们需要杀死并重新启动它。我正在编写一些C#代码来自动执行此操作,但是当我使用Process.Start()
启动TheServer.exe时,我从TheServer收到一个错误对话框,说明“外部异常E0434F4D”。
从资源管理器或命令行启动TheServer时,没有错误。我还尝试在Visual Studio 2010中以调试模式启动该过程,也没有错误。除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找到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就会毫无错误地启动。确实很奇怪。
答案 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)