.net - Wix - 无法重新编译从 MSI 反转的 WXS - ICE68:操作的自定义操作类型无效
问题描述
我正在尝试通过 Visual Studio 2019 Wix 扩展更新 Wix 包(上次运行是 6 年前)。我对 Wix 或 Msi 文件没有经验。
我修改了我们的脚本,以包含新组件并删除过时的组件。但是,它无法使用以下消息构建:
Error ICE68: Invalid custom action type for action '_901E28F5_5222_4D39_B080_BBDFD2D558BF.install.SetProperty'
Error ICE68: Invalid custom action type for action '_901E28F5_5222_4D39_B080_BBDFD2D558BF.uninstall.SetProperty'
第 15 行和第 17 行中出现错误,如下所示:
14 <CustomAction Id="_901E28F5_5222_4D39_B080_BBDFD2D558BF.install" BinaryKey="InstallUtil" DllEntry="ManagedInstall" Execute="deferred" Impersonate="no" />
15 <CustomAction Id="_901E28F5_5222_4D39_B080_BBDFD2D558BF.install.SetProperty" Property="_901E28F5_5222_4D39_B080_BBDFD2D558BF.install" Value="/installtype=notransaction /action=install /LogFile= "[#_02E1DEA55215061A3CC25B6DF52B45F7]" "[VSDFxConfigFile]"" Impersonate="no" />
16 <CustomAction Id="_901E28F5_5222_4D39_B080_BBDFD2D558BF.uninstall" BinaryKey="InstallUtil" DllEntry="ManagedInstall" Execute="deferred" Impersonate="no" />
17 <CustomAction Id="_901E28F5_5222_4D39_B080_BBDFD2D558BF.uninstall.SetProperty" Property="_901E28F5_5222_4D39_B080_BBDFD2D558BF.uninstall" Value="/installtype=notransaction /action=uninstall /LogFile= "[#_02E1DEA55215061A3CC25B6DF52B45F7]" "[VSDFxConfigFile]"" Impersonate="no" />
自定义操作 ID 在<InstallExecuteSequence>
标记下引用为:
<Custom Action="_901E28F5_5222_4D39_B080_BBDFD2D558BF.uninstall.SetProperty" Sequence="1651">$C__02E1DEA55215061A3CC25B6DF52B45F7=2</Custom>
<Custom Action="_901E28F5_5222_4D39_B080_BBDFD2D558BF.uninstall" Sequence="1652">$C__02E1DEA55215061A3CC25B6DF52B45F7=2</Custom>
<Custom Action="_901E28F5_5222_4D39_B080_BBDFD2D558BF.install.SetProperty" Sequence="5998">$C__02E1DEA55215061A3CC25B6DF52B45F7>2</Custom>
<Custom Action="_901E28F5_5222_4D39_B080_BBDFD2D558BF.install" Sequence="5999">$C__02E1DEA55215061A3CC25B6DF52B45F7>2</Custom>
组件 C__02E1DEA55215061A3CC25B6DF52B45F7 是应用程序的主 .exe 文件,声明为:
<Component Id="C__02E1DEA55215061A3CC25B6DF52B45F7" Guid="{8F0503F6-A642-2D2C-C370-49FEAA8F458D}">
<File Id="_02E1DEA55215061A3CC25B6DF52B45F7" Name="MyApplication.exe" KeyPath="yes" ShortName="d_0k9edv.exe" Assembly=".net" AssemblyManifest="_02E1DEA55215061A3CC25B6DF52B45F7" AssemblyApplication="_02E1DEA55215061A3CC25B6DF52B45F7" DiskId="1" Source="bins\File\_02E1DEA55215061A3CC25B6DF52B45F7">
<NativeImage Id="ngen_MyApplication.exe" Platform="32bit" Priority="1" xmlns="http://schemas.microsoft.com/wix/NetFxExtension" />
</File>
<Shortcut Id="_1BE76B3655A64533BB29E6D5DE370C53" Directory="_C6B6AF321296444185E915D4800B50FF" Name="My Application" ShortName="7onuutmc" Icon="_E927036F4145CB7F0D9F32.exe" IconIndex="0" Show="normal" WorkingDirectory="TARGETDIR" Advertise="yes" />
<Shortcut Id="_F8B525F5B9314CB684B09B3AFD8F3F96" Directory="DesktopFolder" Name="My Application" ShortName="-uvlgxeh" Icon="_46C82FB57E11DA24ADA00F.exe" IconIndex="0" Show="normal" WorkingDirectory="TARGETDIR" Advertise="yes" />
</Component>
MyApplication.exe 是一个 .NET 应用程序,其中编译了一个“安装程序”自定义代码操作,使用旧的 Visual Studio vdproj 项目类型的模式,我认为这就是这些声明试图处理的问题。
该脚本在 2014 年最后一次需要时可以正常工作 - Wix 世界中是否有任何更改禁用这些操作?
在 6 年前尝试使用 Wix 文件构建此版本但失败后,我使用最新的 Dark 将 .msi 文件反向工程为 .wxs。它产生相同的行,并且不构建。
因此,我正在努力弄清楚为什么 Dark 会产生 Light/Candle 无法处理的东西。
解决方案
虽然黑暗有时很有用,但就能够从构建的 MSI 重新创建可构建的源项目而言,Redgate .NET Reflector 并没有什么好说的。它会给你有用的片段,但仅此而已。
我要么尝试使用多年前的原始资源来重现 MSI,要么从头开始重写 MSI。FWIW,我有一个名为 IsWiX ( https://github.com/iswix-llc/iswix-tutorials )的开源工具可以提供帮助。此外,如果您只想按下简单的按钮并尽快解决整个问题,我可以提供咨询。
推荐阅读
- javascript - 类似于我的代码的音乐命令的暂停/恢复?
- c# - 如何同时观看大约 100 个文件夹?FileSystemWatcher 或其他更有效的选项?
- java - 为什么按'false'不会破坏这个java循环?
- r - 如何绘制一个包含 4 列的数据框,这些列需要在 R 中将顶部分组为仅 2 列?
- jhipster - Lombok @EqualsAndHashCode 和 Jhipster TestUtil.equalsVerifier
- typescript - 如何在另一个枚举中引用一个枚举
- kubernetes - 准备就绪探测失败并在 kubernetes 内拒绝连接
- python - 如何在 python 中使用 matplotlib 制作正确的 covid 跟踪时间序列图?
- python - JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError:
- python - 如何限制 python 输入到某些 USB 设备