Wix刻录不允许删除文件

Ale*_*kiy 0 installer windows-installer wix burn

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

<Chain>
  ...
  <ExePackage Id="removelnk" Cache="no" SourceFile="run.bat" InstallCommand="del &quot;C:\Users\Public\Desktop\Parity UI.lnk&quot;" />
</Chain>
Run Code Online (Sandbox Code Playgroud)

其中run.bat仅仅是%*允许的描述来运行任意代码在这里.

但是,它不起作用:

[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.
Run Code Online (Sandbox Code Playgroud)

如果我从登录中执行此命令,cmd那么它按预期工作.它甚至没有管理员权限.

这有什么不对?

Ste*_*mul 5

创建转换:您可以使用转换来修改任何MSI文件 - 转换的一个常见用途是删除此类快捷方式.您应该能够在引导程序中指定的命令行上应用该转换 - 尽管我从未尝试过使用WiX引导程序.

转换是应用于原始MSI的"小数据库片段".它会更改内存中的MSI文件,您可以随意更改任何内容.您可以使用Orca或等效的免费工具创建变换.当然也可以使用商业工具 - 例如Advanced Installer.事实上,他们有一个很好的小视频显示过程(向下).

这里有一个很长的解释变换(以及其他内容):如何更好地利用MSI文件.


应用变换:在安装期间通过"变换"属性应用变换.

快速示例命令行:

msiexec.exe /I "My.msi" /QN /L*V "C:\My.log" TRANSFORMS="C:\1031.mst;C:\My.mst"
Run Code Online (Sandbox Code Playgroud)

快速参数说明:

/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.
Run Code Online (Sandbox Code Playgroud)

Burn Bundle详细信息:我没有尝试在Burn包中应用转换(所以我应该有意义不回答),但 MsiPackage元素是你需要的我相信.我发现了这个相当复杂的Burn bundle源文件样本 - 也许值得一看?这似乎神奇的是在 MsiProperty子元素的 MsiPackage元素.


更新:

烧伤Hello-World Style示例:最后在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>
Run Code Online (Sandbox Code Playgroud)

要构建BurnTest.wxs上面的Burn包:

set SetupName=BurnTest

candle.exe %SetupName%.wxs -ext WixBalExtension >> %SetupName%.log
light.exe %SetupName%.wixobj -ext WixBalExtension >> %SetupName%.log
Run Code Online (Sandbox Code Playgroud)

并在github上链接到更好的Burn示例: