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

Rya*_*yan 6 c# windows mercurial winapi process

精简版

当进程退出错误代码-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();
Run Code Online (Sandbox Code Playgroud)

问题是该过程一直以错误代码-1073741502退出,而不会在标准输出或标准错误上输出任何内容.经过网上的一些研究,我发现这个错误代码与应用程序无法正确初始化有关(找不到DLL,可能?),但我不知道如何去搞清楚如何修复它.

请记住,当我通过Web推送到存储库时,会调用此挂钩(因此,IIS通过Python调用Mercurial CGI,将此程序配置为挂钩).

在一个完全不同的Web应用程序中,我能够正常运行HG命令,并且我还可以通过执行此runas /user:<same account as in the code> /noprofile cmd.exe操作然后手动键入hg命令行来运行它 .

此外,如果我设置UseShellExecute = true,那么它执行得很好,但后来我无法获得标准输出.我真的很想只是做一个Web服务调用Web应用程序,它能够成功地执行此命令,但会是一个非常丑陋的解决方案.

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

ser*_*zer 1

我能够通过禁用 UAC 来解决这个问题,因此这听起来像是一个权限问题,尽管我不知道确切的细节。