我使用regsvr32 MyCOM.dll
为我的应用程序注册我的COM对象。 这工作正常我的pipe理员帐户下。 如果将用户切换到非pipe理员,则程序失败。 看来COM对象没有加载非pipe理员用户。 任何想法,为什么这可能是一个可能的解决scheme?
谢谢
COM对象通常需要由管理员用户注册 。 (有些微妙之处和例外,我不会介入这里,因为根据你的描述,这不是发生了什么。)
但是,一旦COM对象被注册,所有用户应该能够使用它,只要对象被注册了适当的权限。
regsvr32 MyCOM.dll
将调用DLL中的DllRegisterserver导出的函数,发生了什么,有达到DLL。 通常它会在HKEY_LOCAL_MACHINE \ software \ Classes(与HKEY_CLASSES_ROOT用于写入操作相同)下注册它的CLSID和其他注册信息,因此注册应该对每个用户都可见,除非用户在HKEY_CURRENT_USER \ software \ Classes下有注册冲突。
我猜注册不是问题,但你的COM对象做一些阻止它加载非管理员用户(请求写入访问HKEY_LOCAL_MACHINE等下的一个键)您可以使用进程监视器,并查找ACCESS_DENIED错误和看看是否提供任何线索。
另一个选项是在非管理员用户的HKEY_CURRENT_USER \ software \ Classes下手动注册该对象。 这应该排除注册问题。