在升级期间使用WIX安装程序在现有数据库上运行更新sql脚本

时间:2014-11-24 10:14:34

标签: wix wix3.8

我正在创建使用WIX创建数据库的安装程序。但是我无法在升级期间找到运行udate脚本的方法。

创建数据库的代码

<Directory Id="DFDB" Name="DealFoundryDataBase" FileSource="$(var.SolutionDir)DealFoundrySetup/DataBaseScripts">
          <Component Id='SqlComponent_Files' Guid='{07DB58E6-5AFC-4BB0-84EC-C5EC6B0E5CA7}' KeyPath='yes'>
            <File Id="CreateTable_sql" Name="CreateTable.sql"/>
            <File Id="InsertStatements_sql" Name="InsertStatements.sql"/>
            <File Id="DFCoreScript_sql" Name="DFCoreScript.sql"/>
          </Component>

            <Component Id='SqlComponent' Guid='{C5412828-84FB-4CC5-AC71-AC246B9D09E8}' KeyPath='yes'>
              <Condition><![CDATA[NOT OLDER_VERSION_FOUND]]> </Condition>
              <sql:SqlDatabase Id='SqlDatabase' Database='[PRO_DFDATABASE_NAME]' User='SQLUser' Server='[PRO_DFDATABASE_SOURCE]'
                CreateOnInstall='yes' DropOnUninstall='yes' ContinueOnError='yes'>
                <sql:SqlScript Id='CreateTable' BinaryKey='CreateTable' ExecuteOnInstall='yes' />
                <!--<sql:SqlScript Id='InsertStatements' BinaryKey='InsertStatements' ExecuteOnInstall='yes'/>-->
              </sql:SqlDatabase>
            </Component>



        </Directory>

 <Binary Id ='CreateTable' SourceFile='$(var.SolutionDir)DealFoundrySetup/DataBaseScripts/DFCoreScript.sql'/>
    <Binary Id ='InsertStatements' SourceFile='$(var.SolutionDir)DealFoundrySetup/DataBaseScripts/InsertStatements.sql'/>
    <Binary Id ='MasterData' SourceFile='$(var.SolutionDir)DealFoundrySetup/DataBaseScripts/MasterData.sql'/>
    <util:User Id='SQLUser' Name='[PRO_DFDATABASE_USERID]' Password='[PRO_DFDATABASE_PASSWORD]' />

上面的代码行正常用于在安装时创建数据库,但我希望在现有数据库升级期间运行更新脚本 Plz救救我。 提前致谢。

1 个答案:

答案 0 :(得分:0)

啊......版本控制。非常有趣。

首先,确保在安装程序中设置了标记。这是我通常做的(这是相当复杂的,因为您可能想要检查特定版本以执行不同的升级脚本):

<Upgrade Id="{YOUR GUID HERE}" > <!--never change me-->
  <UpgradeVersion OnlyDetect="yes" Minimum="$(var.ProductVersion)" Property="NEWERPRODUCTFOUND" IncludeMinimum="no" />
  <UpgradeVersion OnlyDetect="no" Minimum="5.0.0" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" IncludeMaximum="no" RemoveFeatures="All" />
  <UpgradeVersion OnlyDetect="yes" Maximum="5.0.0 " Property="VERYOLDVERSIONFOUND" IncludeMaximum="no" />
</Upgrade>

您可以根据需要定义尽可能多的“版本”,也许每个版本都会为您的数据库运行不同的升级脚本。他们将设置此列表中定义的属性。

其次,WiX定义了一个众所周知的值'Installed',仅在您进行卸载或升级时使用: http://msdn.microsoft.com/library/aa369297.aspx

因此,如果你只想在升级时只运行它 ,你应该使用它:

  <Condition><![CDATA[NOT Installed OR NOT VERYOLDVERSIONFOUND]]> </Condition>

如果要在升级或安装时运行它,它应该是这样的:

  <Condition><![CDATA[(NOT Installed AND Installed) OR (NOT VERYOLDVERSIONFOUND AND VERYOLDVERSIONFOUND]]> </Condition>

与完全没有条件的情况相同,因为它始终是真的。