我有以下设置。有一个 Azure Web 角色进程 (WaIISHost.exe) 运行提升,并且有 IIS7 应用程序池在本地用户下运行。本地用户在首次运行时由提升的 WaIISHost.exe 创建。还有一个向 DCOM 注册的进程外 COM 对象。
我想确保 IIS 进程能够实例化 COM 对象。所以我需要以某种方式在本地用户下登录并尝试实例化 COM 对象。
我目前的方法是LogonUser()
通过 P/Invoke 调用(请求交互式登录),获取登录令牌,然后启动一个新线程并从该线程调用ImpersonateLoggedOnUser()
切换到另一个用户,一旦完成,另一个线程会尝试实例化 COM目的。
一切都很好,除了交互式登录现在默认情况下仅适用于管理员,所以我的方法不再有效 - 我明白了
登录失败:用户在这台计算机上没有被授予请求的登录类型
但是,如果我只是跳过检查 IIS 稍后实例化 COM 对象就好了。
所以我需要更改我的验证码。
一种选择是尝试向用户添加所需的权限(交互式登录),但这是大量的 P/Invoke 代码,而且微软有可能在某个时候更改了其他内容,并且我被禁止完全调整权限。
是否有另一种方法可以验证 COM 对象是否可以在另一个用户帐户下成功实例化?