如何为所有用户注册 COM 对象

Posted

技术标签:

【中文标题】如何为所有用户注册 COM 对象【英文标题】:How to Register a COM Object for All Users 【发布时间】:2011-08-05 15:57:25 【问题描述】:

我使用regsvr32 MyCOM.dll 为我的应用程序注册我的com 对象。这在我的管理员帐户下工作正常。如果将用户切换为非管理员,则程序将失败。似乎没有为非管理员用户加载 COM 对象。关于为什么会这样或可能的解决方案的任何想法?

【问题讨论】:

【参考方案1】:

regsvr32 MyCOM.dll 会调用 dll 中的 DllRegisterServer 导出函数,具体发生什么取决于 dll。通常它会在 HKEY_LOCAL_MACHINE\software\Classes 下注册它的 CLSID 和其他注册信息(与写入操作的 HKEY_CLASSES_ROOT 相同),因此注册应该对每个用户可见,除非用户在 HKEY_CURRENT_USER\software\Classes 下注册冲突。

我猜注册不是问题,但你的 COM 对象做了一些事情,阻止它为非管理员用户加载(请求对 HKEY_LOCAL_MACHINE 下的键的写访问等)你可以使用 Process Monitor 并查看对于 ACCESS_DENIED 错误,看看是否提供任何线索。

另一个选项是为非管理员用户手动注册 HKEY_CURRENT_USER\software\Classes 下的对象。这应该可以排除注册问题。

【讨论】:

【参考方案2】:

COM 对象通常需要由管理员用户注册。 (有一些微妙之处和例外,我不会在这里讨论,因为根据你的描述,这不是正在发生的事情。)

但是,一旦 COM 对象被注册,所有用户都应该能够使用它,前提是该对象已注册并具有适当的权限。

【讨论】:

以上是关于如何为所有用户注册 COM 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有远程用户要求 SSL

如何为用户终止所有活动和非活动的 oracle 会话

Django - 如何为注册站点用户和非站点用户创建模型?

如何为 Postgresql 中的所有数据库创建具有只读权限的用户?

如何为使用未知变量调用的对象获取智能感知?

iOS 如何为每个用户获取数据解析 Swift