Warum ist dieser Prozess abstürzt, sobald es gestartet wird?

Wir haben einen IIS WCF-Dienst, dass ein weiterer Prozess gestartet wird (app.exe) als ein anderer Benutzer. Ich habe die vollständige Kontrolle über beide Programme (und das ist eine dev-Umgebung für jetzt). Der IIS-app-pool läuft, da mir ein domain user (DOMAIN\nirvin), der auch ein lokaler administrator auf der Kiste. Der zweite Prozess laufen soll als lokaler Benutzer (svc-low). Ich bin mit System.Diagnostics.Process.Start(ProcessStartInfo) um den Vorgang zu starten. Der Prozess startet erfolgreich - ich weiß, da gibt es keine Ausnahmen, und ich bekomme eine Prozess-ID. Aber der Prozess stirbt sofort, und ich bekomme eine Fehlermeldung in das Ereignisprotokoll sieht so aus:

Name der fehlerhaften Anwendung: app.exe, version: 1.0.3.0, Zeitstempel: 0x514cd763

Fehlgeschlagenes Modul name: KERNELBASE.dll version: 6.2.9200.16451, Zeitstempel: 0x50988aa6

Ausnahmecode: 0xc06d007e

Fehleroffset: 0x000000000003811c

Fehlgeschlagene Prozess-id: 0x10a4

Fehlgeschlagene Anwendung Startzeit: 0x01ce274b3c83d62d

Fehlgeschlagene Anwendung Pfad: C:\Program Files\company\app\app.exe

Fehlgeschlagenes Modul Pfad: C:\Windows\system32\KERNELBASE.dll

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

Fehlgeschlagene Paket voller name:

Fehlgeschlagene Paket-relativen Anwendungs-ID:

Habe ich ziemlich Gründliche Protokollierung in app.exe (jetzt), also ich glaube nicht, es wirft Fehler in der .NET-code (mehr).

Hier ist das echt widerlich Teil: ich dachte, ich war nur die Einleitung der Prozess falsch ist, so kopierte ich meine Process.Start() rufen Sie in einen stummen WinForms app und es lief auf der Maschine selbst, in der Hoffnung, basteln herum, bis ich habe die Parameter von rechts. So natürlich gearbeitet, dass das erste mal und jedes mal, seit: ich bin in der Lage, konsequent Start des zweiten Prozesses und haben es wie vorgesehen ausgeführt. Es ist nur der Start von IIS, die nicht funktioniert.

Ich habe versucht, geben svc-low-Berechtigung "Anmelden als ein batch Auftrag" und ich habe versucht, mir die Berechtigung "Ersetzen eines Tokens auf Prozessebene" (in der Lokalen Sicherheitsrichtlinie), aber weder scheinen machte keinen Unterschied.

Hilfe!

Umgebung Details

  • Windows Server 2012
  • .NET 4.5 (alle genannten Anwendungen)

Weitere Details

Zuerst app.exe war eine Konsolenanwendung. Versuchen, zu starten war conhost.exe Fehler im Event-Log, also habe ich umgeschaltet app.exe eine Windows-Anwendung. Das hat conhost aus der Gleichung heraus, sondern ließ mich die situation hier beschrieben. (Geführt auf diesem Weg durch diese Frage.)

Den ProcessStartInfo Gegenstand den ich benutze sieht wie folgt aus:

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
};

Eine vorhandene Frage sagt, ich sollte gehen, um die native API, aber a) diese Frage befasst sich eine andere situation und b) der Erfolg der dumme WinForms app deutet darauf hin, dass Process.Start ist eine gute Wahl für den job.

  • Haben Sie versucht, einen einfacheren Fall läuft das Kind, wie die gleichen (domain-admin) - account?
  • Es könnte einen Versuch Wert sein, eine app.exe das ist völlig leer, um auszuschließen, alle Codes drin.
  • Für was es Wert ist, die Ausnahme-code scheint zu bedeuten 'Modul nicht gefunden'. Wenn diese waren mir, ich würde wahrscheinlich ausführen " Process Monitor (Russinovich et al) um eine Idee zu bekommen, wie die Applikation zu laden versucht.
  • Diese Modul nicht gefunden Fehler oft am Ende in das Ereignisprotokoll der Anwendung. Sie auch sagen, was Modul wurde nicht gefunden.
  • Ja es Art von fühlt sich wie ein Pfad problem, vereinbaren sysinternals ist der Weg zu gehen.
  • Also ich bin mir ziemlich sicher, dass es ist nicht ein Pfad problem - der Weg falsch war, einmal vor, und Process.Start() wirft eine ziemlich spezifische Ausnahme in diesem Fall. Ich werde überprüfen, wenn. Ich habe versucht, läuft bei mir wie die app-pool und das 'Kind', und das funktioniert für dev, aber es wird nicht Fliegen in der Produktion - am besten wäre es riskant sein, und im schlimmsten Fall wäre es geradezu abgelehnt, die durch unser security team.
  • guter Gedanke: ich habe jetzt versucht, dass ich erstellt ein "Hallo Welt" win forms .NET 4.5 app.exe dass Referenzen nur für System und funktioniert so ziemlich nichts. Ich bekomme immer noch die gleiche Fehlermeldung in das Ereignisprotokoll. Es fühlt sich an wie es gibt einige, resource(s) svc-low nicht zugreifen, aber ich kann nicht herausfinden, was.

InformationsquelleAutor nateirvin | 2013-03-22
Schreibe einen Kommentar