Подтвердить что ты не робот

Process.Start() под asp.net?

Согласно msdn:

Код управления веб-страницей и сервером ASP.NET выполняется в контексте рабочий процесс ASP.NET на веб-сервере. Если вы используете Start метод на веб-странице или сервере ASP.NET, новый процесс выполняется на веб-сервере с ограниченными правами. процесс не запускается в том же контексте, что и клиентский браузер, и не имеет доступа к рабочему столу пользователя.

Какая учетная запись является "ограниченными разрешениями"?

Пример:

  • Я зашел в win7 как RoyiN
  • включена проверка подлинности Windows.
  • Олицетворение включено как BobK в web.config(по всему сайту)
  • Пользователь W3WP UserA (не сеть или ApplicationPoolIdentity).

В С# я делаю Process.start("....cmd.exe...") ( с Startinfo учетными данными как: "Martin", "Password", "Domain" )

  • Кто эффективный account, который наконец запускает cmd.exe?

  • Кому "ограниченные разрешения" на самом деле относятся?

4b9b3361

Ответ 1

Олицетворение здесь не вступает, так как под капотом Process.Start полагается на один из двух собственных вызовов Win32:

Если указано ProcessStartInfo.UserName:

CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...)

CreateProcessWithLogonW

И если нет:

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

CreateProcess

null, переданный в CreateProcess, - это то, что, вероятно, кусает вас; из MSDN:

Элемент lpSecurityDescriptor структуры определяет дескриптор безопасности для основного потока. Если lpThreadAttributes NULL или lpSecurityDescriptor равен NULL, поток получает защиту по умолчанию дескриптор. ACL в дескрипторе безопасности по умолчанию для потока происходят из токена процесса.

Обратите внимание, что это говорит из токена процесса, не вызывая поток - выданный личность не получает шанса присоединиться к партии, поскольку она связана с потоком.

Ответ 2

Я считаю, что запись MSDN ссылается на тот факт, что даже если олицетворение включено и вы находитесь под конкретным контекстом пользователя, новый процесс будет порожден процессом - и олицетворение происходит на уровне нитей. Тем не менее, я верю, что это будет работать в контексте "UserA".

Здесь соответствующая запись в КБ:

http://support.microsoft.com/kb/889251

Обратите внимание, что в той же записи описывается, как использовать CreateProcessAsUser для разрешения олицетворения.

Ответ 3

Как я выяснил при попытке решить эту проблему, многое другое. Он может работать под RoyiN, но вы можете обнаружить, что USERPROFILE установлен в C:\Windows\system32\config\systemprofile, а не в папку /Users/RoyiN.

В зависимости от того, что вы пытаетесь сделать, это может вызвать некоторые проблемы. В моем случае начало процесса git зависало бы навсегда. Не только были ошибки USERPROFILE и HOME, но также выяснили, что олицетворенные пользователи плохо играют с подключенными сетевыми дисками.