我正在创建使用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救救我。 提前致谢。
答案 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>
与完全没有条件的情况相同,因为它始终是真的。