Pourquoi est-ce processus s'écraser dès qu'il est lancé?

Nous avons un IIS service WCF qui lance un autre processus (app.exe) en tant qu'utilisateur différent. J'ai un contrôle complet sur les deux applications (et c'est un environnement de dev pour l'instant). Le pool d'applications IIS s'exécute comme moi, un utilisateur de domaine (DOMAIN\nirvin), qui est aussi un administrateur local sur la boîte. Le deuxième processus est censé exécuter en tant qu'utilisateur local (svc-bas). Je suis à l'aide de System.Diagnostics.Process.Start(ProcessStartInfo) pour lancer le processus. Le processus démarre avec succès - je le sais parce que il n'y a pas les exceptions levées, et je reçois un ID de processus. Mais le processus meurt immédiatement, et j'obtiens une erreur dans le Journal des Événements qui ressemble à:

Défaillant nom de l'application: app.exe version: 1.0.3.0, horodatage: 0x514cd763

Nom du module défaillant: KERNELBASE.dll version: 6.2.9200.16451, horodatage: 0x50988aa6

Code d'Exception: 0xc06d007e

Décalage d'erreur: 0x000000000003811c

Processus défaillant id: 0x10a4

Application défaillante heure de début: 0x01ce274b3c83d62d

Défaillant chemin de l'application: C:\Program Files\company\app\app.exe

Chemin d'accès du module défaillant: C:\Windows\system32\KERNELBASE.dll

Id de rapport: 7a45cd1c-933e-11e2-93f8-005056b316dd

Package défaillant nom complet:

Défaillant relatif au package de l'application ID:

J'ai assez approfondie de l'exploitation forestière dans app.exe (maintenant), donc je ne pense pas qu'il jette les erreurs dans la .NET code (ou plus).

Voici la vraie odieux partie: j'ai pensé que j'étais juste de lancer le processus de mal, alors j'ai copié mon Process.Start() appel à un muet application WinForms et il a couru sur la machine que moi-même, en espérant que de bricoler autour jusqu'à ce que je suis les paramètres de droite. Alors, bien sûr, qui a fonctionné la première fois, et à chaque fois depuis que je suis en mesure de toujours lancer le deuxième processus et l'exécuter comme prévu. C'est seulement le lancement à partir de IIS qui ne fonctionne pas.

J'ai essayé de donner svc-faible autorisation d'ouvrir une session en tant que tâche" et j'ai essayé de me donner la permission de "Remplacer un jeton de niveau processus" (dans la Stratégie de Sécurité Locale), mais ils ne semblent avoir fait toute la différence.

Aider!

Détails De L'Environnement

  • Windows Server 2012
  • .NET 4.5 (toutes les applications mentionnées)

Des Détails Supplémentaires

Au premier app.exe est une Application de Console. En essayant de lancement a été prise conhost.exe générer des erreurs dans le Journal des Événements, donc je suis passé app.exe pour être une Application Windows. Qui a eu conhost de l'équation, mais m'a laissé la situation décrite ici. (Visite guidée en bas de ce chemin par cette question.)

La ProcessStartInfo objet-je utiliser ressemble à ceci:

new ProcessStartInfo
{
    FileName = fileName,
    Arguments = allArguments,
    Domain = domainName,
    UserName = userName,  
    Password = securePassword,
    WindowStyle = ProcessWindowStyle.Hidden,
    CreateNoWindow = true,  
    UseShellExecute = false,
    RedirectStandardOutput = false
    //LoadUserProfile = true  //I've done it with and without this set
};

Une question existante dit que je doit aller vers le bas de l'API native, mais que la question répond à une situation différente, et b) le succès de la muette WinForms app suggère que Process.Start est un choix viable pour l'emploi.

Avez-vous essayé un cas plus simple de l'exécution de l'enfant comme le même domaine (admin) compte?
Il pourrait être la peine d'essayer une app.exe c'est complètement vide, afin d'écarter tout le code à l'intérieur.
Pour ce que ça vaut le coup de cette exception, le code s'affiche dans le sens de "module non trouvé". Si c'était moi, je serais probablement exécuter le Moniteur de Processus (Russinovich et al) pour avoir une idée de ce que l'application est en train d'essayer de charger.
Ces module introuvable erreurs finissent souvent dans le journal des événements d'application. Ils ont même vous dire ce module n'a pas été trouvé.
Ouais il sorte de se sent comme un problème de chemin d'accès, d'accord sysinternals est le chemin à parcourir.

OriginalL'auteur nateirvin | 2013-03-22