我正在执行一项任务,在使用 installshield 安装期间注册 .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 派生的 View 。如果运行 regasm/regfile:foo.dll,您可以生成一个 regfile,然后更改键名称中的所有引用以使其成为当前用户的本地文件。
在生成的 .reg 文件中,所有 reg 键添加都将添加到 HKEY_CLASSES_ROOT 中。您需要将它们替换为“HKEY_CURRENT_USER\Software\Classes”。
此外,如果您需要 COM 注册才能使用 32 位应用程序并且运行的是 x64,那么对于 HKEY_CLASSES_ROOT\CLSID 的添加,您需要在 CLSID token 之前插入“\Wow6432Node”。
需要明确的是,“HKEY_CLASSES_ROOT\CLSID”的添加内容将变为“HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID”。要使其在 x86 上工作,您只需对 CLSID 条目进行此更改。
此外,在某些情况下,您可以考虑通过为使用 COM 服务器的 EXE 创建 list 文件来使用注册免费 COM 互操作,以使 ProgID/ClassID 可用于 EXE,而无需实际将注册信息写入到注册表。
关于c# - 如何使用 InstallShield 在没有管理员权限的情况下为每个用户注册互操作 .net 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7594280/