Процесс.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, ...)

CreateProcessWithLogonW

а если нет:

CreateProcess(null, cmdLine, null, null, true, ...)

является CreateProcess

на nulls, переданные в 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 ошибались, я также обнаружил, что олицетворенные пользователи не играют хорошо с подключенными сетевыми дисками.