C# 如何验证COM对象是否可以从另一个用户下实例化?

C# 如何验证COM对象是否可以从另一个用户下实例化?,c#,.net,azure,com,azure-web-roles,C#,.net,Azure,Com,Azure Web Roles,我有以下设置。有一个Azure web角色进程(WaIISHost.exe)正在运行,还有一个IIS7应用程序池在本地用户下运行。本地用户在第一次运行时由提升的WaIISHost.exe创建。还有一个在DCOM中注册的out-proc-COM对象 我希望确保IIS进程能够实例化COM对象。因此,我需要以某种方式在本地用户下登录,并尝试实例化COM对象 我目前的方法是通过p/Invoke调用LogonUser()(请求交互式登录),获取登录令牌,然后启动一个新线程,并从该线程调用Impersona

我有以下设置。有一个Azure web角色进程(WaIISHost.exe)正在运行,还有一个IIS7应用程序池在本地用户下运行。本地用户在第一次运行时由提升的WaIISHost.exe创建。还有一个在DCOM中注册的out-proc-COM对象

我希望确保IIS进程能够实例化COM对象。因此,我需要以某种方式在本地用户下登录,并尝试实例化COM对象

我目前的方法是通过p/Invoke调用
LogonUser()
(请求交互式登录),获取登录令牌,然后启动一个新线程,并从该线程调用
ImpersonateLoggedOnUser()
切换到另一个用户,一旦完成,另一个线程将尝试实例化COM对象

一切都很好,但我的方法不再有效——我

登录失败:用户未被授予此计算机上请求的登录类型

但是,如果我跳过检查,IIS稍后会很好地实例化COM对象

所以我需要更改我的验证代码

一种选择是尝试向用户添加所需的权限(交互式登录),但这需要大量的p/Invoke代码,而且有可能在某个时刻Microsoft会更改其他内容,我不允许完全调整权限


是否有其他方法可以验证COM对象是否可以从另一个用户帐户下成功实例化?

这不是一个通用的答案,但对于此特定场景来说可以。一种可能的解决方案是在IIS中实现一个只接受本地请求的特殊URL(检查
HttpRequestBase.IsLocal
),并尝试实例化COM对象。以前尝试模拟的代码现在将向该URL(在同一台计算机上)发送HTTP请求。

这不是一个通用答案,但适用于此特定场景。一种可能的解决方案是在IIS中实现一个只接受本地请求的特殊URL(检查
HttpRequestBase.IsLocal
),并尝试实例化COM对象。以前尝试模拟的代码现在将向该URL(在同一台计算机上)发送HTTP请求。

能否验证将为其实例化COM对象的用户是否具有管理员权限?如果交互式登录仅适用于管理员级别的用户,那么您可以预见该COM是否可以在该用户下实例化。@JP_medevice:好的,如果Microsoft从管理员那里删除该权限怎么办?我真的不关心特权-我想知道我可以执行该操作。您能验证将为其实例化COM对象的用户是否具有管理员权限吗?如果交互式登录仅适用于管理员级别的用户,那么您可以预见该COM是否可以在该用户下实例化。@JP_medevice:好的,如果Microsoft从管理员那里删除该权限怎么办?我真的不关心特权-我想知道我可以执行操作。