【问题标题】:Windows SDK - C# - Debugging process exiting with error code -1073741502Windows SDK - C# - 调试进程退出并出现错误代码 -1073741502
【发布时间】:2011-07-19 00:38:49
【问题描述】:

短版

当进程退出并返回错误代码 -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,该程序已将此程序配置为钩子)。

在一个完全不同的 Web 应用程序中,我可以很好地运行 HG 命令,而且我也可以通过这样做来运行它 runas /user:<same account as in the code> /noprofile cmd.exe 然后在 hg 命令行中手动输入。

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

任何想法为什么这件事没有执行?

【问题讨论】:

  • -1073741502 = 0xC0000142 = 'DLL 初始化失败'。我猜测本机 dll(32 位与 64 位)的位数错误。除非另有配置,否则 IIS 以 64 位执行。
  • 我也是这么想的,但是它正在执行的应用程序池被配置为“启用 32 位应用程序”。一个更广泛的问题是我只是不知道如何在该级别调试应用程序(即,如何确定哪个 DLL 加载失败以及加载失败的原因)。似乎您必须使用 Windows SDK 才能做到这一点,但这有点超出我的专业知识。
  • 我认为您可以检查事件查看器以确定哪个 dll 未加载
  • 不知道它是否相关,我正在使用 java 的 Runtime.exec() 启动 cmd /c,使用相同的命令行和相同的参数,前 11 次(或多或少)它有效,从第 12 次开始得到错误代码 -1073741502
  • 任何带有完整源代码示例的最终解决方案?

标签: c# windows mercurial process winapi


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多