如何使用InstallShield在没有管理员权限的情况下为每个用户注册interop .net asssembly

我正在处理一项任务,即在安装期间使用instalshield注册.net程序集时,不会提示普通用户弹出(UAC)以批准安装Windows Addin应用程序。 在Windows XP上,它工作正常,但在vista和Windows 7上安装时,弹出窗口需要批准。 根据要求,它不应该来。 如果UAC打开并且没有管理员权限注册每个用户的程序集,有没有办法绕过vista和Windows 7上的弹出窗口?

请帮忙吗?

谢谢。

实际上,COM可以按用户或每台机器注册,因为HKEY_CLASSES_ROOT是从HKEY_CURRENT_USER \ Software \ Classes和HKEY_LOCAL_MACHINE \ Software \ Classes派生的视图。 如果运行regasm /regfile:foo.dll,则可以生成一个regfile,然后更改密钥名称中的所有引用,使其成为当前用户的本地引用。

在生成的.reg文件中,所有reg键添加都将是HKEY_CLASSES_ROOT。 您需要将它们替换为“HKEY_CURRENT_USER \ Software \ Classes”。

此外,如果您需要COM注册以使用32位应用程序并且您正在运行x64,那么对于HKEY_CLASSES_ROOT \ CLSID的添加,您需要在CLSID令牌之前插入“\ Wow6432Node”。

需要说明的是,“HKEY_CLASSES_ROOT \ CLSID”的添加内容将变为“HKEY_CURRENT_USER \ Software \ Classes \ Wow6432Node \ CLSID”。 要使其在x86上运行,您只需对CLSID条目进行此更改。

此外,在某些情况下,您可以考虑通过为EXE创建清单文件来使用免费注册COM Interop,该文件使用COM服务器以使EXEID / ClassID可供EXE使用,而无需将注册信息实际写入注册表。

这是开发人员中常见的错误,他们不熟悉提升和用户权限。

您正在安装的程序集是按机器注册的。 这就是为什么它需要提升注册过程。 它在XP上也有所提升,但你不知道是否因为它是自动的。 如果您要在普通用户帐户下运行安装,则由于权限不足而导致安装失败。

由于这个程序集是为每台机器注册的,你为什么要改变它的行为呢? 这就像尝试修改Windows以支持您的应用程序一样。 你适应环境,而不是相反。

因此,正确的解决方案是使用每台机器安装程序。 这样,您的安装过程将为所有用户安装,并始终需要管理员权限。

每用户安装专为仅使用每个用户位置的产品而设计。 如果要在每台计算机位置安装资源,则应使用每台计算机安装。