Windows SDK - C # - Процесс отладки завершается с кодом ошибки -1073741502 - PullRequest
6 голосов
/ 20 марта 2011

КРАТКАЯ ВЕРСИЯ

Как определить, какая DLL не загружается (и, возможно, почему), когда процесс завершается с кодом ошибки -1073741502?

ДЛИТЕЛЬНАЯ ВЕРСИЯ

Я пытаюсь написать хук pretxnchangegroup для Mercurial, и как часть этого хука мне нужно получить результат выполнения команды:

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), но я понятия не имею, как выяснить, как это исправить.

Имейте в виду, что эта ловушка вызывается, когда я отправляюсь в хранилище через Интернет (поэтому IIS вызывает Mercurial CGI через Python, для которого эта программа настроена как ловушка).

В совершенно другом веб-приложении я могу отлично выполнять команды HG, и я также могу выполнять это, выполняя runas /user:<same account as in the code> /noprofile cmd.exe, а затем введите вручную в командной строке hg.

Кроме того, если я установлю UseShellExecute = true, то он будет работать нормально, но тогда я не смогу получить стандартный вывод. Я действительно испытываю желание просто вызвать веб-сервис для веб-приложения, которое может успешно выполнить эту команду, но это было бы действительно уродливым решением.

Есть идеи, почему эта штука не выполняется?

Ответы [ 2 ]

4 голосов
/ 19 июля 2012

Я думаю, это может быть связано с тем, как Windows обрабатывает новые процессы, которые вы порождаете.
Каждый процесс будет использовать неинтерактивную память рабочего стола, пока у вас не закончится куча Windows, и больше не будет запущено ни одного процесса.

http://www.tomshardware.co.uk/forum/217729-36-application-failed-initialize-properly-0xc0000142

http://blogs.msdn.com/b/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx

1 голос
/ 20 февраля 2015

Мне удалось решить эту проблему, отключив UAC, так что это звучит как проблема с разрешениями, хотя я не знаю точных деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...