如何为所有用户注册 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 对象的主要内容,如果未能解决你的问题,请参考以下文章