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不仅错误,我还发现冒充用户不能很好地使用映射网络驱动器。