【问题标题】:Run the Update sql Script on Existing Database using WIX Installer during Upgrade在升级期间使用 WIX 安装程序在现有数据库上运行更新 sql 脚本
【发布时间】:2014-11-24 10:14:33
【问题描述】:

我正在为使用 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]' />

以上代码行在安装时创建数据库时运行良好,但我想在升级现有数据库时运行更新脚本 请帮助我。 提前致谢。

【问题讨论】:

    标签: wix wix3.8


    【解决方案1】:

    啊……版本控制。太有趣了。

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

    <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 定义了一个众所周知的值“已安装”,该值仅在您进行卸载或升级时使用: http://msdn.microsoft.com/library/aa369297.aspx

    因此,如果您只想在升级时ONLY 运行它,您应该使用这个:

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

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

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

    这与根本没有条件是一样的,因为它总是为真。

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2014-02-10
      相关资源
      最近更新 更多