Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为注册为受限用户创建COM对象?_Com_Atl - Fatal编程技术网

如何为注册为受限用户创建COM对象?

如何为注册为受限用户创建COM对象?,com,atl,Com,Atl,我在vs2010中创建了一个项目,它是为每个用户安装的,但我需要包含一个COM对象(在dll中,我使用的是ATL)。问题是我只能使用管理员权限注册DLL,但我的安装程序不需要管理员权限,com注册失败 这就是我发现的: 我进行了修改,将.rgs文件从HKCR更改为HKCU,并修改了DllRegisterServer代码,以通过HKCU\Software\Classes覆盖HKCR 但是我得到了相同的错误:0x8002801c使用regsvr32(作为受限用户),安装程序也给了我一个错误。是否还

我在vs2010中创建了一个项目,它是为每个用户安装的,但我需要包含一个COM对象(在dll中,我使用的是ATL)。问题是我只能使用管理员权限注册DLL,但我的安装程序不需要管理员权限,com注册失败

这就是我发现的:

我进行了修改,将.rgs文件从HKCR更改为HKCU,并修改了DllRegisterServer代码,以通过HKCU\Software\Classes覆盖HKCR

但是我得到了相同的错误:0x8002801c使用regsvr32(作为受限用户),安装程序也给了我一个错误。是否还需要创建每个用户的COM对象


Thans.

创建引用DLL的清单文件。查看Visual Studio 2017中的无痛清单生成

,您可以在项目属性>链接器>常规中启用每个用户重定向选项

我不需要修改rgs文件

要注册COM.exe,请使用/RegServerPerUser标志。normal/RegServer标志对我不起作用()


要注册COM.dll,请使用
regsvr32/n/i:user“xxxx.dll”
()。

使用SysInternals的ProcMon实用程序找出它正在写入的密钥。如果您只看到正在编写HKCU,那么您确实需要允许用户编写自己的注册表项。
regsvr32/i
使用
DllInstall
而不是
DllRegisterServer
,使用HKCU(与默认HKCR相反)选项进行注册。在ATL的当前状态下,
DllInstall
的实现包含在标准项目模板中。