我正在创建一个bootsrapper,我想删除在安装过程中创建的链接。所以我写下面的步骤:
<Chain>
...
<ExePackage Id="removelnk" Cache="no" SourceFile="run.bat" InstallCommand="del "C:\Users\Public\Desktop\Parity UI.lnk"" />
</Chain>
其中run.bat
只是%*
,允许按照here所述运行任意代码。
但是,它不起作用:
[19EC:0E2C][2018-06-16T18:32:27]i301: Applying execute package: removelnk, action: Install, path: C:\ProgramData\Package Cache\1608BB75347CD8C40187E5F3C0A969ED73A98D51\run.bat, arguments: '"C:\ProgramData\Package Cache\1608BB75347CD8C40187E5F3C0A969ED73A98D51\run.bat" del "C:\Users\Public\Desktop\Parity UI.lnk"'
[19EC:0E2C][2018-06-16T18:32:27]e000: Error 0x80070001: Process returned error: 0x1
[19EC:0E2C][2018-06-16T18:32:27]e000: Error 0x80070001: Failed to execute EXE package.
[0AE4:2B94][2018-06-16T18:32:27]e000: Error 0x80070001: Failed to configure per-machine EXE package.
[0AE4:2B94][2018-06-16T18:32:27]i319: Applied execute package: removelnk, result: 0x80070001, restart: None
[0AE4:2B94][2018-06-16T18:32:27]e000: Error 0x80070001: Failed to execute EXE package.
如果我从登录cmd
执行此命令,那么它按预期工作。它甚至没有管理员权限。
这里有什么问题?
答案 0 :(得分:5)
创建转换 :您可以使用transform修改任何MSI文件 - 转换的一个非常常见的用途就是删除快捷键的。您应该能够在引导程序中指定的命令行上应用该转换 - 尽管我从未尝试过使用WiX引导程序。
变换是&#34;小数据库片段&#34;适用于原始MSI的。它会更改内存中的MSI文件,您可以随意更改任何内容。您可以使用Orca or an equivalent free tool创建转换。当然也可以使用商业工具 - 例如Advanced Installer。实际上他们有a nice little video showing the process(在底部)。
这里有一个很长的解释变换(以及其他内容): How to make better use of MSI files 。
应用转换 :您在安装过程中通过Transforms property应用转换。
快速示例命令行:
msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"
快速参数说明:
/I = run installation sequence
/QN = run completely silently
/L*V "C:\My.log"= verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst.
刻录捆绑详细信息 :我还没有尝试在Burn捆绑中应用转换(所以我应该有理由不回答),但是{{3}是我所需要的,我相信。 Burn捆绑源文件的MsiPackage element - 也许值得一看?对于I found this rather complicated sample来说,MsiProperty child element似乎有魔力。
<强>更新强>:
刻录Hello-World样式 :最后在Windows计算机上运行快速测试(在Linux上运行)。 以下是如何通过Burn 应用转换(最小样本,仅用于显示基础知识,而不是假装是好标记)。
只是内联警告:我听到一些有关应用的谣言 以这种方式进行的转换可能并不适用于所有情况 - 例如 修理。请彻底测试。它适用于我的测试。还测试升级方案(例如主要升级)。
这会将转化ShortcutDesktop.mst
应用于原始MSI ShortcutDesktop.msi
:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<!-- Maybe generate yourself an Upgrade-GUID here: https://www.guidgenerator.com/ -->
<Bundle Name="MyCoolTestApp" Version="1.0.0.0" Manufacturer="Someone"
UpgradeCode="PUT-GUID-HERE">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<MsiPackage SourceFile="ShortcutDesktop.msi">
<MsiProperty Name="TRANSFORMS" Value="ShortcutDesktop.mst" />
</MsiPackage>
</Chain>
</Bundle>
</Wix>
要在上面构建刻录包BurnTest.wxs
:
set SetupName=BurnTest
candle.exe %SetupName%.wxs -ext WixBalExtension >> %SetupName%.log
light.exe %SetupName%.wixobj -ext WixBalExtension >> %SetupName%.log
在github上链接到更好的Burn示例:
答案 1 :(得分:1)
Burn不支持批处理文件。修改机器的一切都应该在一个包装中完成。