0

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

问题陈述...

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

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

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

问题1...

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

问题2 。. .

如果问题 1 不可能,我的另一个想法是将查找替换 SQL 片段和文件安装片段分解为单独的 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>

提前致谢。

4

1 回答 1

0

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

于 2016-02-08T21:15:31.147 回答