Windows SDK – C# – debugging进程退出,错误代码为-1073741502

简洁版本

你怎么知道当一个进程退出,错误代码为-1073741502哪个DLL无法加载(可能是为什么)?

长版

我正在尝试为Mercurial编写一个pretxnchangegroup钩子,作为该钩子的一部分,我需要获得运行该命令的输出:

hg log

我用来启动和运行hg.exe进程的代码如下所示:

 string Command = "log"; Process p = new Process(); ProcessStartInfo psi = p.StartInfo; p.StartInfo.FileName = @"C:\Program Files (x86)\Mercurial\hg.exe"; psi.CreateNoWindow = true; psi.LoadUserProfile = true; psi.RedirectStandardError = true; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; psi.WorkingDirectory = Environment.CurrentDirectory; p.StartInfo.Arguments = Command; // Pass-through environment variables psi.UserName = Properties.Settings.Default.HG_User; psi.Domain = Properties.Settings.Default.HG_Domain; psi.Password = new System.Security.SecureString(); foreach (char c in Properties.Settings.Default.HG_Pass) { psi.Password.AppendChar(c); } p.Start(); p.WaitForExit(); 

问题在于进程保持退出,错误代码为-1073741502,而不在标准输出或标准错误上输出任何内容。 经过一些在线研究,我发现这个错误代码与应用程序未能正确初始化(找不到DLL,也许?)有关,但我不知道如何解决这个问题。

请记住,当我通过Web推送到存储库时,会调用这个钩子(所以,IIS通过Python调用Mercurial CGI,将此程序configuration为钩子)。

在一个完全不同的Web应用程序中,我能够运行HG命令就好了,我也可以通过执行runas /user:<same account as in the code> /noprofile cmd.exe来运行此操作,然后手动input在hg命令行中。

另外,如果我设置UseShellExecute = true ,那么它执行得很好,但是我不能得到标准输出。 我真的很想做一个web服务调用的web应用程序, 能够成功地执行这个命令,但这将是一个非常丑陋的解决scheme。

任何想法为什么这个东西没有执行?

Solutions Collecting From Web of "Windows SDK – C# – debugging进程退出,错误代码为-1073741502"