Необходимо выполнить *.exe на сервере с ASP.net
Моя текущая ситуация заключается в том, что мне нужно выполнить exe (который создает локальный файл .txt) на удаленном сервере с IIS, на котором размещен API ASP.net/C#. Я создал локального пользователя (например, userA) в качестве администратора для запуска веб-службы на удаленном сервере, но файл .txt не был создан. Я уже проверил и предоставил необходимые разрешения на доступ к userA и добавил пользователя в различные группы. Самое смешное, что, если я зарегистрирован как userA в удаленной системе, exe выполняется как ожидалось. Если я выхожу из системы, это не сработает. Сервер - это сервер Win 2008 с IIS 7. Любая помощь будет оценена.
ОБНОВЛЕНИЕ: я решил проблему и опубликовал ответ и несколько ссылок на связанные с этим вопросы здесь. Короче говоря, мне нужно было установить "load user profile" true в пуле приложений IIS.
Спасибо всем за их вклад
Ответы
Ответ 1
ОБНОВЛЕНИЕ: мне удалось решить проблему через много недель. Спасибо всем за ваш вклад. По-видимому, IIS по умолчанию не загружает профили пользователей Windows. Поэтому при запуске как другого пользователя, который не вошел в систему, их профиль окон должен загружаться IIS. В расширенном меню настроек вашего пула приложений есть опция "Профиль загрузочных окон", я просто изменил это на true. В предыдущих версиях IIS по умолчанию было установлено значение "true".
Связанные вопросы по SO с тем же решением:
1) Исключения безопасности в ASP.NET и Load User Profile в IIS 7.5
2) Запуск проекта веб-приложения asp.net в IIS7 вызывает исключение
3) Исключение System.Web.AspNetHostingPermission при новом развертывании
Другой
4) http://geekswithblogs.net/ProjectLawson/archive/2009/05/05/iis-system.web.aspnethostingpermission-exception-on-windows-7-rc.aspx
Ответ 2
Вы можете использовать Process.Start
Process process = new Process();
process.StartInfo.FileName = "CVS.exe";
process.StartInfo.Arguments = "if any";
process.Start();
Также есть сообщение о запуске процессов как другого пользователя в asp.net:
http://weblogs.asp.net/hernandl/archive/2005/12/02/startprocessasuser.aspx
Предоставление учетных данных пользователя
Вкратце говорится, что вы должны перенаправить процесс с таким кодом:
ProcessStartInfo info = new ProcessStartInfo("cmd.exe");
info.UseShellExecute = false;
info.RedirectStandardInput = true;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
info.UserName = dialog.User; // see the link mentioned at the top
info.Password = dialog.Password;
using (Process install = Process.Start(info))
{
string output = install.StandardOutput.ReadToEnd();
install.WaitForExit();
// Do something with you output data
Console.WriteLine(output);
}