Windows SDK – C # – Processus de débogage sortant avec le code d’erreur -1073741502

VERSION COURTE

Comment déterminer quelle DLL ne parvient pas à se charger (et potentiellement pourquoi) lorsqu’un processus se termine avec le code d’erreur -1073741502?

VERSION LONGUE

J’essaie d’écrire un crochet pretxnchangegroup pour Mercurial, et dans le cadre de ce hook, je dois obtenir le résultat de l’exécution de la commande:

hg log

Le code que j’utilise pour démarrer et exécuter le processus hg.exe est le suivant:

 ssortingng 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.SecureSsortingng(); foreach (char c in Properties.Settings.Default.HG_Pass) { psi.Password.AppendChar(c); } p.Start(); p.WaitForExit(); 

Le problème est que le processus continue à sortir avec le code d’erreur -1073741502, sans rien afficher sur la sortie standard ou l’erreur standard. Après quelques recherches en ligne, j’ai découvert que ce code d’erreur avait quelque chose à voir avec l’application qui ne parvenait pas à s’initialiser correctement (impossible de trouver les DLL, peut-être?), Mais je ne sais pas comment résoudre le problème.

Gardez à l’esprit que ce hook est appelé lorsque je passe sur le référentiel via le web (IIS appelle donc le CGI Mercurial via Python, qui a ce programme configuré en tant que hook).

Dans une application Web totalement différente, je suis capable d’exécuter les commandes HG très bien, et je suis également capable de l’exécuter en runas /user: /noprofile cmd.exe , puis en tapant manuellement dans la ligne de commande hg.

De plus, si je UseShellExecute = true , il s’exécute UseShellExecute = true , mais je ne peux pas obtenir la sortie standard. Je suis vraiment tenté de faire un appel de service Web à l’application Web capable d’exécuter cette commande avec succès, mais ce serait une solution vraiment moche.

Des idées pourquoi cette chose ne s’exécute pas?

Je pense que cela peut être lié à la manière dont Windows gère les nouveaux processus que vous créez.
Chaque processus consum de la mémoire de bureau non interactive jusqu’à ce que vous soyez à court de segment de mémoire Windows et qu’aucun autre processus ne puisse être démarré.

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

J’ai été en mesure de résoudre ce problème en désactivant UAC, donc cela ressemble à un problème de permissions même si je ne connais pas les détails exacts.