asp.net下的Process.Start()?

时间:2012-12-28 18:32:00

标签: c# asp.net iis iis-7.5 w3wp.exe

根据msdn

  

ASP.NET网页和服务器控制代码在上下文中执行   Web服务器上的ASP.NET辅助进程。如果您使用“开始”   ASP.NET网页或服务器控件中的方法,新进程   使用受限权限在Web服务器上执行。该   进程不会在与客户端浏览器相同的上下文中启动,并且   无法访问用户桌面。

哪个 帐户正好是“受限权限”

示例:

  • 我以RoyiN
  • 的身份登录win7
  • Windows身份验证已启用
  • 启用启用 web.config(整个网站)
  • BobK用户为W3WP(不是网络,也不是ApplicationPoolIdentity)。

在C#中,我UserA Process.start("....cmd.exe...")凭据为:“Startinfo”,“Martin”,“{{1} }“)

  • 最终运行Password的效率Domain是谁?

  • “限制权限”实际上与谁有关?

3 个答案:

答案 0 :(得分:5)

模拟不会在这里发挥作用,因为在引擎盖下,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   来自流程令牌。

请注意,它来自进程令牌,而不是调用线程 - 模拟身份没有机会加入聚会,因为它绑定到线程。

答案 1 :(得分:2)

我相信MSDN条目指的是即使启用了模拟并且您处于特定用户上下文中,新进程也将由进程生成 - 并且模拟发生在线程级别。也就是说,我相信它会在'UserA'背景下运行。

以下是相关的KB条目:

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

请注意,相同的条目描述了如何使用CreateProcessAsUser来允许模拟。

答案 2 :(得分:2)

正如我在尝试解决this problem时发现的那样,许多小事情都有所不同。它可能在RoyiN下运行,但你可能会发现USERPROFILE设置为C:\ Windows \ system32 \ config \ systemprofile,而不是你的/ Users / RoyiN文件夹。

根据您的尝试,可能会导致一些问题。在我的情况下,启动一个git进程将永远挂起。 USERPROFILE和HOME不仅错误,我还发现被模拟的用户不能很好地使用映射的网络驱动器。