Я запускаю внешнюю программу из ASP.NET :
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());
Все отлично работает с этим кодом: внешняя программа выполняется и process.StandardOutput.ReadToEnd () возвращает правильный вывод.
Но после того, как я добавлю эти две строки перед process.Start () (чтобы запустить программу в контексте другой учетной записи пользователя):
startInfo.UserName = userName;
startInfo.Password = securePassword;
Программа не выполняется и process.StandardOutput.ReadToEnd () возвращает пустую строку. Нет исключений.
userName и securePassword являются правильными (в случае неверных учетных данных выдается исключение).
Как запустить программу в контексте другой учетной записи пользователя?
Среда: .NET 4, Windows Server 2008 32bit
UPD:
Приложение отлично работает на сервере разработки ASP.NET + Windows 7, но не работает на IIS 7 + Windows Server 2008 Web Edition.
UPD2:
Нашел это в журнале событий:
Сбой приложения cryptcp.exe, версия 3.33.0.0, отметка времени 0x4be18460, сбойный модуль kernel32.dll, версия 6.0.6002.18005, отметка времени 0x49e03821, код исключения 0xc0000142, смещение ошибки 0x00009eed, идентификатор процесса 0xbf4, время запуска приложения 0x01caf1b91.
cryptcp.exe - это имя внешнего приложения.