c# - 如何使用 InstallShield 在没有管理员权限的情况下为每个用户注册互操作 .net 程序集

标签 c# winforms admin installshield privileges

我正在执行一项任务,在使用 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/

相关文章:

django - 访问管理站点时,“str”对象没有属性 'resolve'

django - 防止django admin转义html

c# - 如何仅匹配正则表达式中的第一个数字

c# - 从 MemoryStream 反序列化对象时出错

c# - 从 xslt 中,您可以输出整个 XML 吗?

c# - BackgroundWorker 调用目标抛出的异常

c# - C#中的字符串提取混淆

c# - 隐藏 DateTimePicker 的文本和 Usercontrol 调整大小

Django 无法以更改形式显示 model.id?

c# - UDP 客户端 - 创建套接字时出现异常通常只允许每个套接字地址(协议(protocol)/网络地址/端口)使用一次