gpt4 book ai didi

wix - 将 regsvr32 作为 WIX 安装程序的一部分运行

转载 作者:行者123 更新时间:2023-12-02 05:17:43 31 4
gpt4 key购买 nike

我编写了一个 COM 组件,该组件通过 WIX 生成的 MSI 分发。

COM 组件具有相当复杂且非静态的注册逻辑,这意味着将注册信息直接嵌入到 Windows Installer WXS 文件中并不是一个可行的选择 - 必须使用 regsvr32 来完成注册。 - 而且它是一个 32 位 COM 组件,因此它必须使用 regsvr32.exe 的 32 位版本- 即%SystemRoot%\SysWow64\regsvr32.exe在 64 位 Windows 上或 %SystemRoot%\System32\regsvr32.exe在 x86 Windows 上。

我注意到 WIX 与此 WXS XML 存在两个问题:

<InstallExecuteSequence>
<Custom Action="COMRegister" After="InstallFinalize">NOT Installed</Custom>
<Custom Action="COMUnregister" After="InstallInitialize">Installed</Custom>
</InstallExecuteSequence>

<CustomAction Id="COMRegister" Directory="APPLICATIONROOTDIRECTORY" ExeCommand='regsvr32.exe /s "[APPLICATIONROOTDIRECTORY]Component.dll"' />
<CustomAction Id="COMUnregister" Directory="APPLICATIONROOTDIRECTORY" ExeCommand='regsvr32.exe /s /u "[APPLICATIONROOTDIRECTORY]Component.dll"' />
  1. 错误regsvr32.exe正在被调用。我注意到 resgvr32.exe 的 x64 版本正在 64 位系统而不是 32 位版本上运行。
  2. regsvr32.exe在没有提升权限的情况下运行,因此 COM 注册失败,并显示 E_ACCESSDENIED .

对于 1. 如果我使用 [WindowsFolder]\SysWOW64\regsvr32.exe 硬编码 regsvr32.exe 可执行文件的路径,它就可以工作。 ,但这在真正的 32 位机器上不起作用,其中 SysWow64不存在。

对于2.我在网上看到正在改变After="InstallFinalize" to之后=“删除现有产品”would cause it to run with elevated permissions, however instead this just gives me errors about RemoveExistingProducts` 是一个未解析的符号名称。

如何解决这两个问题?

更新

(在过去的两个小时里与这个问题苦苦挣扎之后,我确信 WIX 的作者是 H.P. Lovecraft 的密切关系)

我已经通过编写自己的中间步骤程序解决了第一个问题,该程序是一个 32 位可执行文件,因此它将始终在 WOW 上下文下运行,因此它将可靠地调用 32 位 regsvr32.exe程序。

我发现第二个问题的问题是这些:对于要以提升的权限运行的 CustomAction(嗯,在与主安装程序作业相同的安全上下文中),这些条件必须为真:

  1. <Custom/>" must have之前=“安装完成”, and **not**之后=“”any other values for Before=""` 无法可靠地工作,因为 WIX 或 Windows Installer 可能会重新排列操作(wut)。
  2. <CustomAction />有这些属性显式设置:
    • Execute="deferred"
    • Impersonate="off"

即便如此,我不想使用我的帮助程序来正确解析 32 位 regsvr32.exe 。有什么选择?

最佳答案

我根本不建议使用自注册,如果您确实必须将 File/@SelfRegCost 设置为 1,那么这并不是使用 Windows Installer 进行注册的真正正确方法。

更好的方法是提取注册表值并使用 WiX 写入它们 - 您也可以使用热量来生成值。

关于wix - 将 regsvr32 作为 WIX 安装程序的一部分运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26012077/

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