2010-05-11 5 views
6

ho eseguito un programma esterno da ASP.NET:.NET 4: Process.Start utilizzando le credenziali restituisce output vuoto

var process = new Process(); 
var startInfo = process.StartInfo; 

startInfo.FileName = filePath; 
startInfo.Arguments = arguments; 

startInfo.UseShellExecute = false; 
startInfo.RedirectStandardOutput = true; 
//startInfo.RedirectStandardError = true; 

process.Start(); 

process.WaitForExit(); 

Console.Write("Output: {0}", process.StandardOutput.ReadToEnd()); 
//Console.Write("Error Output: {0}", process.StandardError.ReadToEnd()); 

Tutto funziona bene con questo codice: il programma esterno viene eseguito e processo. StandardOutput.ReadToEnd() restituisce l'output corretto.

Ma dopo aggiungo queste due righe prima Process.Start() (per eseguire il programma nel contesto di un altro account utente):

startInfo.UserName = userName; 
startInfo.Password = securePassword; 

Il programma non viene eseguito e processo. StandardOutput.ReadToEnd() restituisce una stringa vuota. Non vengono lanciate eccezioni.

userName e securePassword siano corretti (in caso di credenziali non corrette viene generata un'eccezione).

Come eseguire il programma nel contesto di un altro account utente?

Ambiente: .NET 4, Windows Server 2008 a 32 bit

UPD:

L'applicazione funziona benissimo sotto server di sviluppo ASP.NET + Windows 7, ma non riesce in IIS 7 + di Windows Server 2008 Web Edition.

UPD2:

trovato questo nel registro eventi:

ha provocato l'errore cryptcp.exe dell'applicazione, la versione 3.33.0.0, timestamp 0x4be18460, ha provocato l'errore modulo kernel32.dll, versione 6.0.6002.18005, tempo timbro 0x49e03821, codice di eccezione 0xc0000142, offset di errore 0x00009eed, ID processo 0xbf4, ora di avvio dell'applicazione 0x01caf1b91f5b851a.

cryptcp.exe è il nome dell'applicazione esterna.

+0

D'altra parte, questa domanda http://stackoverflow.com/questions/2345620/alternative-to-allow-service-to-interact-with-desktop, trovata cercando lo stesso offset di errore e kernel32.dll potrebbe indicare che si tratta di un problema insormontabile una volta eseguito sotto IIS - il cryptcp.exe deve volere interagire con il desktop in qualche modo (tramite la mia lettura) –

risposta

1

Guardando allo MSDN documentation ci sono alcuni altri elementi che si consiglia di configurare per avviare correttamente un'applicazione come un altro utente.

  1. impostare il dominio, il nome utente e le proprietà delle password (Si dovrebbe impostare il dominio)
  2. impostare la directory di lavoro, come per impostazione predefinita con un nome utente/password è lo system32

che potrebbero aiutarti a risolvere il problema.

+1

Lo stesso risultato. – alexey

2

According to Microsoft, non è possibile leggere l'output standard E l'errore standard come quello in cui si verifica un deadlock. Per risolvere, utilizzare qualcosa di simile al seguente:

private readonly StringBuilder outputText = new StringBuilder(); 
private readonly StringBuilder errorText = new StringBuilder(); 

. . .

 process.OutputDataReceived += delegate(
      object sendingProcess, 
      DataReceivedEventArgs outLine) 
     { 
      if (!string.IsNullOrEmpty(outLine.Data)) 
      { 
       outputText.AppendLine(outLine.Data); 
      } 
     }; 

     process.ErrorDataReceived += delegate(
      object sendingProcess, 
      DataReceivedEventArgs errorLine) 
     { 
      if (!string.IsNullOrEmpty(errorLine.Data)) 
      { 
       errorText.AppendLine(errorLine.Data); 
      } 
     }; 

     process.BeginOutputReadLine(); 
     process.BeginErrorReadLine(); 
     process.WaitForExit(); 
     Console.WriteLine(errorText.ToString()); 
     Console.WriteLine(outputText.ToString()); 
+0

Grazie, buon commento. Ma questa domanda affronta un altro problema. Commenterò il reindirizzamento dell'output degli errori. – alexey

1

È possibile che l'applicazione che si sta iniziando necessiti del profilo caricato (per impostazione predefinita, non lo sarà). Hai provato a impostare la proprietà LoadUserProfile su true?

3

Mi rendo conto che è stato chiesto qualche tempo fa, ma ho incontrato lo stesso problema e trovato la soluzione su questo sito: The Perils and Pitfalls of Launching a Process Under New Credentials

Applicando la soluzione ai sensi della sezione applicazione non correttamente inizializzata correttamente fissata per me.

Spero che questo salvi altri tempo e frustrazione!

+0

Con ciò intendi la correzione? Il sito collegato è inattivo. – Doug