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.
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) –