Wix刻录不允许删除文件

时间:2018-06-16 15:39:52

标签: wix windows-installer installer burn

我正在创建一个bootsrapper,我想删除在安装过程中创建的链接。所以我写下面的步骤:

<Chain>
  ...
  <ExePackage Id="removelnk" Cache="no" SourceFile="run.bat" InstallCommand="del &quot;C:\Users\Public\Desktop\Parity UI.lnk&quot;" />
</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执行此命令,那么它按预期工作。它甚至没有管理员权限。

这里有什么问题?

2 个答案:

答案 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不支持批处理文件。修改机器的一切都应该在一个包装中完成。