System.Diagnostics.Process.Start не работает с IIS

Когда я запускаю System.Diagnostics.Process.Start из моего консольного приложения, он работает, но тот же код, когда я запускаю с моего веб-сервиса, размещенного в IIS, не работает.

Это что-то связано с привилегиями ASP.Net? если да, то как я могу настроить его из моего кода на C #.

Код веб-страницы и сервера ASP.NET выполняется в контексте рабочего процесса ASP.NET на веб-сервере. Если вы используете метод «Старт» на веб-странице или сервере ASP.NET, новый процесс выполняется на веб-сервере с ограниченными разрешениями. Процесс не запускается в том же контексте, что и клиентский браузер, и не имеет доступа к рабочему столу пользователя. http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx

– Дать разрешение для учетной записи рабочего процесса ASP.NET.

для взаимодействия с рабочим столом или для запуска рабочего процесса ASP.NET в учетной записи SYSTEM.

  • Чтобы узнать, как разрешить рабочему процессу запускаться в учетной записи SYSTEM и знать разрешения по умолчанию для учетной записи ASPNET, проверьте эту статью INFO: Идентификация процесса и запроса в ASP.NET: http://support.microsoft.com/default.aspx? SCID = кб, ан-нас, 317012

– Включить службу IIS Admin для взаимодействия с рабочим столом

Чтобы настроить это, выполните следующие действия.

  • а. Откройте панель управления и выполните следующие действия: Для Windows NT: щелкните Службы. Для Windows 2000, Windows XP и .NET Server: нажмите «Администрирование», а затем «Службы».

  • б. Дважды щелкните службу IIS Admin.

  • с. На вкладке «Вход в систему» ​​установите флажок «Разрешить службу для взаимодействия с рабочим столом». Не забудьте запустить службу IIS Admin Service как локальную систему.
  • д. Остановите и перезапустите службу IIS Admin.

У меня была аналогичная проблема, и проблема доступа к рабочему столу из службы не была проблемой. Он отлично работал, когда не выдавал себя за другого пользователя, но при попытке запустить процесс как другого пользователя он потерпел неудачу. Первое, что нужно сделать, когда он не запустится, – это узнать всю информацию о проблеме. Первый вопрос: возвращает ли Process.Start значение true или false. Во-вторых, возникли ли вы какие-либо исключения при попытке начать процесс.

Прежде чем вы сможете полностью изучить, важно знать, был ли запущен Process.Start с использованием UseShellExecute или нет – это должно быть ложным для олицетворения, но в противном случае вы можете выбрать, использовать ли его и вызывает различные функции Win32 в зависимости от этого параметра.

Если вы выполняете процесс, который должен запускаться как другой пользователь, не пытайтесь использовать .NET-олицетворение – имя пользователя, пароль, домен StartInfo – это то, что вам нужно установить. Однако в IIS у вас есть дополнительная блокировка, и единственное решение, которое я нашел на Windows Server 2008, действительно связано с некоторыми вызовами Win32 и реализацией абстрактных библиотек безопасности. Многие сценарии, которые вы можете запустить, описаны здесь: http://asprosys.blogspot.co.uk/2009/03/perils-and-pitfalls-of-launching.html

Пример кода с этой страницы показывает, как вызвать библиотеку и добавить Windows Station и Desktop доступ к пользователю перед началом процесса в качестве этого пользователя. Это было то, что мне нужно, чтобы заставить Process.Start работать из IIS, исключив UAC, DEP и любые другие аббревиатуры из трех букв, о которых я мог подумать;)

Если вы используете приложение Windows 7, то вы не можете. в основном сервисы, выполняющие сеанс 0, и пользовательский рабочий стол, выполняющий сеанс 1, поэтому вы не можете общаться с сеанса 0 до сеанса 1. Даже если вы пытаетесь связаться с процессом входа в систему (который используется для запуска сеанса пользователя для каждого нового пользователя), вы можете ‘получить некоторую локальную информацию (настройки браузера, такие как информация локального хранилища)

Для меня что-то вроде этого:

 ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = true; psi.LoadUserProfile = true; psi.WorkingDirectory = sender.Server.MapPath("../");// This line solved my problem psi.FileName = sender.Server.MapPath("../myexecutable.exe"); psi.Arguments = "Myargument1 Myargument2"; Process.Start(psi); 

`

  • Ошибка HTTP 403.14 - Запрещено - веб-сервер настроен так, чтобы не отображать содержимое этого каталога
  • «StartTag: недопустимое имя элемента» в default.aspx
  • Как перенаправить URL-путь в IIS?
  • Как предотвратить перезапуск приложения ASP.NET при изменении web.config?
  • Как увеличить тайм-аут запроса в IIS?
  • Хостинг проектов ASP.NET 5 на IIS
  • Как добавить пользователей на FTP-сайт в IIS Windows 7?
  • ASP.NET MVC и кэширование IE - управление заголовками ответов неэффективно
  • Где Console.WriteLine входит в ASP.NET?
  • Ошибка HTTP 500.19 и код ошибки: 0x80070021
  • IIS захватывает запрос CORS Preflight OPTIONS
  • Давайте будем гением компьютера.