TL; DR : мне нужно вызвать CreateProcessWithLogonW
из моего приложения ASP.NET, размещенного на IIS, чтобы вызвать внешний исполняемый файл под другой учетной записью и делегировать ему задание.Как я могу это сделать?
Причина, по которой я не могу просто использовать Process.Start
API, заключается в том, что внешний исполняемый файл имеет ряд зависимостей COM, которые необходимо настроить.Это подразумевает наличие нескольких записей в реестре и наличие у учетной записи необходимых разрешений на запуск и активацию, которые необходимо настроить с помощью конфигурации DCOM.Достаточно сказать, что это оказалось совершенно неуправляемым для каждой из идентификаций AppPool на каждом сервере, который у нас есть.
Идея состоит в том, чтобы создать одну дополнительную интерактивную учетную запись в каждой системе, настроить ее по мере необходимости, а затем протестировать.что внешний исполняемый файл может быть успешно запущен вручную.
Теперь проблема заключается в том, как запустить этот исполняемый файл из приложения ASP.NET и запустить его под новой учетной записью (только исполняемый файл, а не весь ASP.NET).app!).
Простой вызов CreateProcessWithLogonW
приводит к ошибке «Отказано в доступе», которая, как мне сказали, является следствием недостаточной привилегии удостоверения AppPool.
У меня естьискал в интернете, и я видел много ответов о том, как предоставить разрешения файловой системы для идентификаторов AppPool.Ничего о разрешениях для CreateProcessWithLogonW
, за исключением изменения удостоверения на что-то другое.
Но мне все еще интересно, есть ли способ настроить удостоверение AppPool для этого?
Мне неудобно менять личность на Local Service
или Local System
, как было предложено в другом месте.Я беспокоюсь, что это может привести к появлению неизвестных дополнительных разрешений, которые на самом деле не нужны приложению ASP.NET, что, в свою очередь, может изменить последствия для безопасности довольно большой базы кода.
Я признаю, что, вероятно, имеюa "Вот, будь драконами !!!" тип реакции на изменение идентичности, но мне также честно интересно, почему я не могу просто добавить одно дополнительное разрешение вместо существующей идентичности?