在WiX中编辑打包文件

时间:2016-02-08 09:20:20

标签: wix wix3.9

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

问题陈述......

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

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

要做到这一点,我要用热量包装这些文件。当它在这个文件中很糟糕时,我的一个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>

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题是我的自定义操作是使用Execute =&#34; immediate&#34;设置的。这应该是Execute =&#34; deferred&#34;。

相关问题