在WiX中编辑打包文件

在WiX中编辑打包文件,wix,wix3.9,Wix,Wix3.9,这里是WiX新手。我很好奇使用WiX是否可以使用这种方法 问题陈述 我正在打包一些SQL文件,希望根据用户在运行时输入的一些参数执行这些文件。考虑连接字符串信息。用户可以输入的参数之一是希望安装DB的目录 当前解决方案(不起作用) 为了做到这一点,我使用热包装这些文件。当它吸入这个文件时,我的一个SQL文件中有一些令牌,自定义操作会寻找这些令牌,以便基本上在文件中执行查找替换。问题是,虽然它确实在进行查找替换,但它是针对吸入热量的源文件而不是.msi文件中存在的文件进行查找替换的 问题1 在Wi

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

问题陈述

我正在打包一些SQL文件,希望根据用户在运行时输入的一些参数执行这些文件。考虑连接字符串信息。用户可以输入的参数之一是希望安装DB的目录

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

为了做到这一点,我使用热包装这些文件。当它吸入这个文件时,我的一个SQL文件中有一些令牌,自定义操作会寻找这些令牌,以便基本上在文件中执行查找替换。问题是,虽然它确实在进行查找替换,但它是针对吸入热量的源文件而不是.msi文件中存在的文件进行查找替换的

问题1

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

问题2

如果问题1不可能,我的另一个想法是将find replace SQL片段和file install片段分解成单独的msi文件。因此,第一步是通过一个msi将我需要的所有文件分解到安装目录中。下一个msi将在文件系统上存在文件时执行SQL片段,以便我进行编辑。这听起来像是解决问题的明智方法吗?这很可能是因为我试图围绕WiX工作,而不是在这里与WiX合作

当前代码段

<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>


提前感谢。

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

你什么时候安排你的自定义操作的?自定义操作应在文件部署到目标计算机后运行。应该在InstallExecuteSequence表中的Install files操作之后运行。我的自定义操作是在FileInstalled之后安排的,但我认为问题可能是,即使我正在等待该事件,我也看不到磁盘上的文件。这就像它解压了文件,但实际上没有写入磁盘。执行周期中是否有需要等待的事件?