gpt4 book ai didi

c# - 有没有办法让 DLL 注册到 HKLM?

转载 作者:行者123 更新时间:2023-11-30 12:13:45 25 4
gpt4 key购买 nike

情况:

我在 C# 中创建了一个 DLL,它使用 COM 运行 Process.Start 以通过网络浏览器运行程序。我使用 VS2010 的内置部署项目创建了一个 MSI。我为这个 DLL 中的对象指定了 Guid 属性,但我从未指定位置。当我运行 MSI 并选择为“Just Me”安装时,将按预期在 HKCU (current_user) 中创建注册表项。我需要它为所有用户运行,所以当我运行 MSI 并选择为“所有人”安装时,注册表项在 HKLM (local_machine) 中创建,也如预期的那样。无论哪种方式,一旦 MSI 安装了 DLL,使用 DLL 的 Intranet Web 应用程序对我作为管理员 (current_user) 和所有用户 (local_machine) 都可以正常工作。

但是,在我公司的主要 IT 部门内部,我们无法创建自己的 MSI。我们必须将请求和我们的 DLL/TLB 文件发送给唯一功能是为供应商/内部开发人员创建 MSI 的人。当我手动运行他的 MSI 并选择为“所有人”安装时,它再次按预期工作。

问题:

然而,MSI 需要作为部署的软件自动运行,当发生这种情况时,注册表项仅在 HKEY_CURRENT_USER 中创建,因此当测试用户尝试使用功能。他说 ALLUSERS 属性设置为 1,所以这应该有效。此外,当我要求他将它们安装到正确的位置(local_machine)时,他坚持认为我需要在我的 DLL 中进行这些更改,因为“MSI 文件不创建注册表项,它来自 DLL安装”。根据我在网上阅读的各种文章,MSI 通常指定在注册表中何处创建这些 key 。

问题(也适用于 TL;DR):

他关于我需要在我的 DLL 中指定注册表位置的断言是否属实?如果是这样,我如何以编程方式指定这些键默认转到 HKLM?现在,我所做的只是指定 ComVisible、ClassInterface、Guid、ProgId 和 ComDefaultInterface……我从未指定位置,除了 MSI 中的“Everyone/Just Me”。我对 COM 对象比较陌生,并且在注册表中弄乱了我自己的创建,所以我不想跳到他的喉咙里说我不能做他应该做的事情。

谢谢!

最佳答案

如果我正确理解你的问题,你的意思是:

  • 您不能使用自己的 MSI 在网络中部署 DLL,
  • 您无法控制您的 IT 部门在他们提供的 MSI 中打包和部署您的 DLL 的方式,
  • 您希望 IT 注册 DLL 的方式与您的方式完全相同。

在这种情况下,我建议创建合并模块 (MSM) 而不是安装包 (MSI)。将所有设置逻辑(文件、注册表项、自定义操作等)放在合并模块中。

然后围绕该合并模块编写一个简单的 MSI shell 供您自己使用,并将合并模块提供给您的 IT 部门,要求他们将其集成到他们自己的安装包构建过程中。

关于c# - 有没有办法让 DLL 注册到 HKLM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com