代码之家  ›  专栏  ›  技术社区  ›  Alex Zhukovskiy

WIX刻录不允许删除文件

  •  0
  • Alex Zhukovskiy  · 技术社区  · 7 年前

    我正在创建一个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 回复  |  直到 7 年前
        1
  •  5
  •   Stein Åsmul    7 年前

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

    转换是应用于原始MSI的“小数据库片段”。它会更改内存中的msi文件,您可以随意更改。可以使用创建转换 Orca or an equivalent free tool .当然,也可以使用商业工具,如高级安装程序。事实上他们有 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 bundle中应用转换(因此我应该有不回答的感觉),但是 MsiPackage element 我相信这是你需要的。 I found this rather complicated sample 关于burn bundle源文件-也许值得一看?似乎魔法就在 MsiProperty child element 对于 msipackage元素 .


    更新 以下内容:

    Burn Hello世界风格示例 :最后在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示例的链接:

        2
  •  1
  •   Bob Arnson    7 年前

    Burn不支持批处理文件。所有修改机器的工作都应该在一个包中完成。