asp.net下的Process.Start()?
根据msdn :
ASP.NET Web页面和服务器控制代码在Web服务器上的ASP.NET辅助进程的上下文中执行。 如果在ASP.NET网页或服务器控件中使用Start方法,则新进程将在具有受限权限的Web服务器上执行。 该过程不会在与客户端浏览器相同的上下文中启动,也无法访问用户桌面。
哪个 帐号正是“限制权限” ?
示例:
- 我以
RoyiN
登录win7 - Windows身份validation已启用
- 模拟已在 web.config(整个站点上)作为
BobK
启用 -
W3WP
用户是UserA
(不是网络,也不是ApplicationPoolIdentity)。
在C#中,我执行Process.start("....cmd.exe...")
( 使用 Startinfo
凭据:“ Martin
”,“ Password
”,“ Domain
”)
-
谁是最终运行
cmd.exe
的高效account
? -
“限制权限”实际上与谁有关?
模拟将不会在这里发挥作用,因为在幕后, Process.Start
依赖于两个本机Win32调用之一:
如果提供了ProcessStartInfo.UserName:
CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...)
CreateProcessWithLogonW
如果不:
CreateProcess(null, cmdLine, null, null, true, ...)
CreateProcess的
传入CreateProcess的null
是可能咬你的; 来自MSDN:
结构的lpSecurityDescriptor成员指定主线程的安全描述符。 如果lpThreadAttributes为NULL或lpSecurityDescriptor为NULL,则该线程将获取默认安全描述符。 线程的默认安全描述符中的ACL来自进程令牌。
注意它从进程令牌说,而不是调用线程 – 模拟身份没有机会加入聚会,因为它绑定到线程。
我相信MSDN条目指的是即使启用了模拟并且您处于特定用户上下文之下,新进程也将由进程生成 – 并且模拟发生在线程级别。 也就是说,我相信它会在’UserA’背景下运行。
这是相关的KB条目:
http://support.microsoft.com/kb/889251
请注意,相同的条目描述了如何使用CreateProcessAsUser来允许模拟。
正如我在试图解决这个问题时发现的那样,许多小事情都有所不同。 它可能在RoyiN下运行,但您可能会发现USERPROFILE设置为C:\ Windows \ system32 \ config \ systemprofile,而不是您的/ Users / RoyiN文件夹。
根据您尝试做的事情,这可能会导致一些问题。 在我的情况下,启动一个git进程将永远挂起。 USERPROFILE和HOME不仅错误,我还发现冒充用户不能很好地使用映射网络驱动器。