我有一個使用Wix創建的安裝程序。我希望能夠指定安裝sql server的位置。我能想到的一個解決方案是在CreateDatabase腳本中放置一個佔位符,並且在運行時只需將佔位符替換爲用戶指定的實際路徑。Wix:在指定位置創建一個sql server數據庫
我想知道是否有更好的方法來做到這一點?威克斯是否提供我可以使用的任何東西?
感謝,
我有一個使用Wix創建的安裝程序。我希望能夠指定安裝sql server的位置。我能想到的一個解決方案是在CreateDatabase腳本中放置一個佔位符,並且在運行時只需將佔位符替換爲用戶指定的實際路徑。Wix:在指定位置創建一個sql server數據庫
我想知道是否有更好的方法來做到這一點?威克斯是否提供我可以使用的任何東西?
感謝,
我最終通過使用動態SQL解決了這個問題。爲尋找解決方案,請接受的答案了以下問題:
您可以利用標準WiX SQL extension。例如,SqlString元素提供了一個選項來指定在安裝時執行的SQL查詢。 SqlDatabase元素提供了創建SQL數據庫的開箱即用選項。兩者分別接受@SQL和@Server屬性的Windows Installer屬性。這意味着你可以獲得用戶輸入,將其保存到屬性中並在Sql元素中使用該屬性。
你不能從維克斯得到這個免費的。
使用SqlString,一些參數和你所注意到的直接使用CREATE DATABASE一樣。你需要:
如果你期望使用SQL權威性你會當然也需要通過DB_USER/DB_PASS
我會強烈推薦使用uggest編寫自己的自定義操作來驗證參數。
擴大嚴的回答,還有,如果你使用SQL擴展語法非常簡單 - 你需要MDF和LDF(數據+日誌文件)都包含在您的SQL數據庫中,但通過引用相同的文件名附加它們。
以下假定SQL Express服務器將在本地的本地主機\ SQLEXPRESS實例
<Property Id="SQLINSTANCE" Value="SQLEXPRESS" />
<Property Id="SQLSERVER" Value="LOCALHOST" />
<Property Id="DATA_FOLDER" Value="C:\Program Files\Microsoft SQL Server\MSSQL11.SQLExpress\MSSQL\DATA\" />
<Component Id="Sql_Database_Deploy" NeverOverwrite="yes" Directory="[DATA_FOLDER]">
<File Source="Northwind.mdf"></File>
<File Source="Northwind)log.ldf"></File>
<sql:SqlDatabase Id="SqlDatabase" Database="Northwind" Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes" DropOnUninstall="yes">
<sql:SqlFileSpec Filename="[DATA_FOLDER]Northwind.mdf" Id="Northwind_SqlFileSpec"/>
<sql:SqlLogFileSpec Filename="[DATA_FOLDER]Northwind_log.ldf" Id="Northwind_SqlLogFileSpec"/>
</sql:SqlDatabase>
</Component>
我已經從這個例子中爲簡潔起見省略認證下安裝,但你也可以指定SQL用戶用於使用User元素的命令,並在SqlDatabase屬性中引用用戶元素的Id。
我最終通過使用動態SQL解決了這個問題。對於任何正在尋找解決方案的人,請檢查以下問題的接受答案: http://stackoverflow.com/questions/5626850/sql-server-use-parameter-in-create-database – sean717 2011-04-13 17:23:46