在 WiX 中编辑打包文件

Posted

技术标签:

【中文标题】在 WiX 中编辑打包文件【英文标题】:Editing packaged file in WiX 【发布时间】:2016-02-08 09:20:19 【问题描述】:

这里是 WiX 新手。我很好奇这种方法是否可以使用 WiX。

问题陈述...

我正在打包一些我想要针对用户在运行时输入的参数执行的 SQL 文件。想想连接字符串信息。用户可以输入的参数之一是他们希望安装数据库的目录。

当前解决方案(不起作用).....

为此,我使用热量打包这些文件。当它吸入这些文件时,我的一个 SQL 文件中有一些标记,自定义操作查找这些标记基本上是在文件中进行查找替换。问题在于,虽然它确实在进行查找替换,但它是针对吸收热量的源文件而不是 .msi 文件中存在的文件进行的。

问题 1...

在 WiX 工作流程中,有没有一种方法可以通过自定义操作对存储在 .cab 或 .msi 文件中的文件进行处理?如果可能的话,有人可以给我举个例子吗?

问题 2 。 . .

如果问题 1 不可能,我的另一个想法是将查找替换 SQL 片段和文件安装片段分解为单独的 msi 文件。所以第一步是通过一个 msi 将我需要的所有文件分解到安装目录中。下一个 msi 将执行 SQL 片段,因为此时文件系统上存在文件供我进行编辑。这听起来像是解决问题的明智方法吗?很可能我正在尝试解决 WiX 而不是这里的 WiX。

当前代码sn-ps

<Product>
   <!-- This is where this will be installed-->
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="INSTALLFOLDER" Name="ZOLLData">
            <Directory Id="SQLINSTALLFOLDER" Name="Sql" />
        </Directory>
    </Directory>

    <!-- CUSTOM ACTION DEFINITIONS-->
    <CustomAction Id="FindReplaceZEDSTextCA"
                  Return="check"
                  BinaryKey="GemstoneInPremiseInstallerCustomActions.CA.dll"
                  Execute="immediate"
                  DllEntry="FindReplaceText" />



    <!-- Database Information-->
    <util:User Id="SQLUser" Name="[SQLUSERNAME]" Password="[SQLPASSWORD]"/>
    <sql:SqlDatabase Id="MasterDatabase" Database="master"
                        Server="[SQLSERVERNAME]"
                        User="SQLUser"/>


    <InstallUISequence>
        <Show Dialog="SqlConnectionDlg" After="CostFinalize" />
        <Show Dialog="ProgressDlgCustom" After="SqlConnectionDlg"/>
    </InstallUISequence>

    <InstallExecuteSequence>
        <Custom Action="FindReplaceZEDSTextCA" After="InstallFiles">
        </Custom>
    </InstallExecuteSequence>
</Product>

<Fragment>
        <DirectoryRef Id="INSTALLFOLDER" />
    </Fragment>
    <Fragment>
        <ComponentGroup Id="SqlComponents">
            <Component Id="CreateDatabase.sql" Directory="INSTALLFOLDER" Guid="6A2C6088-9302-451C-A01B-02D618D4AC27">
            </Component>
        </ComponentGroup>
    </Fragment>

提前致谢。

【问题讨论】:

您何时安排自定义操作?将文件部署到目标计算机后,应运行自定义操作。应该在 InstallExecuteSequence 表中的安装文件操作之后运行。 我的自定义操作安排在 FilesInstalled 之后,但我认为问题可能是即使我正在等待该事件,我也看不到磁盘上的文件。就像它解压缩文件但实际上并没有写入磁盘一样。执行周期中是否有需要等待的事件? 【参考方案1】:

问题是我的自定义操作设置为 Execute="immediate"。这应该是 Execute="deferred"。

【讨论】:

以上是关于在 WiX 中编辑打包文件的主要内容,如果未能解决你的问题,请参考以下文章

CMake系列:WIX打包

WiX:如何打包 exe 或 dll 以仅在安装期间使用

使用WIX 进行商业智能OEM打包

使用WIX 进行商业智能OEM打包

使用WIX 进行商业智能OEM打包

wix toolset将 cab 打包进msi