我有以下设置。有一个运行提升的Azure Web角色进程(WaIISHost.exe),并且在本地用户下运行IIS7应用程序池。首次运行时,升级的WaIISHost.exe正在创建本地用户。还有一个在DCOM中注册的out-proc COM对象。
我想确保IIS进程能够实例化COM对象。所以我需要以某种方式在本地用户下登录并尝试实例化COM对象。
我目前的方法是通过P / Invoke调用LogonUser()
(请求交互式登录),获取登录令牌,然后启动一个新线程并从该线程调用ImpersonateLoggedOnUser()
切换到其他用户一旦完成,另一个线程会尝试实例化COM对象。
一切都很好,除了the interactive logon is only for Administrators by default now所以我的方法不再适用 - 我得到了
登录失败:未在此计算机上授予用户请求的登录类型
如果我只是跳过检查,IIS稍后会实例化COM对象。
所以我需要更改验证码。
一种选择是尝试向用户添加所需的权限(交互式登录),但这是很多P / Invoke代码,而且有可能微软改变别的东西,我不允许完全调整权限。
是否有另一种方法可以验证是否可以从另一个用户帐户下成功实例化COM对象?
答案 0 :(得分:1)
这不是一个普遍的答案,但对于这个特定情况很好。一种可能的解决方案是在IIS中实现一个特殊的URL,它只接受本地请求(检查HttpRequestBase.IsLocal
)并尝试实例化COM对象。以前尝试模拟的代码现在会向该URL发送HTTP请求(在同一台计算机上)。