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

use*_*041 8 windows com permissions privileges

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

And*_*ers 11

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下手动注册对象.这应该排除注册问题.


JSB*_*ոգչ 8

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

但是,一旦注册了COM对象,所有用户都应该能够使用它,前提是该对象已使用适当的权限进行注册.