Процесс.Start () под asp.net?
по данным в MSDN :
ASP.NET код веб-страницы и серверного управления выполняется в контексте в ASP.NET рабочий процесс на веб-сервере. Если вы используете Start метод в an ASP.NET веб-страница или серверный элемент управления, новый процесс выполняется на веб-сервере с помощью ограниченные разрешения. Этот процесс не запускается в том же контексте, что и браузер клиента, и не имеет доступа к пользователю рабочий стол.
, который счета именно это "ограниченными правами" ?
пример :
- я зарегистрирован в win7 как
RoyiN
- проверка подлинности windows включено
- олицетворения включено as
BobK
at web.config (по всему сайту) - на
W3WP
пользовательUserA
(не сетевой ни ApplicationPoolIdentity).
в C# я делаю Process.start("....cmd.exe...")
( С Startinfo
учетные данные в виде : "Martin
","Password
","Domain
")
, который является эффективным!--9-->, который, наконец, работает
cmd.exe
?к кому на самом деле относятся" ограниченные разрешения"?
3 ответов
олицетворение не будет играть здесь, так как под капотом,Process.Start
полагается на один из двух собственных вызовов Win32:
Если ProcessStartInfo.Имя пользователя предоставляется:
CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...)
а если нет:
CreateProcess(null, cmdLine, null, null, true, ...)
на null
s, переданные в CreateProcess, - это то, что, вероятно, кусает вас; от MSDN:
в lpSecurityDescriptor член структуры определяет дескриптор безопасности для основного потока. Если lpThreadAttributes имеет значение NULL или lpSecurityDescriptor имеет значение NULL, поток получает безопасность по умолчанию дескриптор. ACLs в дескрипторе безопасности по умолчанию для потока исходите из токена процесса.
обратите внимание, что он говорит от маркера процесса, не вызывая поток-олицетворенная идентичность не получает возможности присоединиться к партии, так как она привязана к потоку.
Я считаю, что запись MSDN относится к тому факту, что даже если олицетворение включено, и вы находитесь в определенном пользовательском контексте, новый процесс будет порожден процессом - и олицетворение происходит на уровне потока. Тем не менее, я считаю, что это будет работать в контексте "UserA".
вот соответствующая запись KB:
http://support.microsoft.com/kb/889251
обратите внимание, что та же запись описывает, как использовать CreateProcessAsUser для позвольте для олицетворения.
Как я узнал при попытке решить проблема, много мелочей разные. Он может работать под RoyiN, но вы можете обнаружить, что USERPROFILE установлен в C:\Windows\system32\config\systemprofile, а не ваша папка/Users / RoyiN.
в зависимости от того, что вы пытаетесь сделать, это может вызвать некоторые проблемы. В моем случае запуск процесса git будет висеть вечно. Мало того, что USERPROFILE и HOME ошибались, я также обнаружил, что олицетворенные пользователи не играют хорошо с подключенными сетевыми дисками.