我使用Wix创建了一个安装程序。我希望能够指定安装sql server的位置。我能想到的一个解决方案是在CreateDatabase脚本中放置一个占位符,并在运行时将placeholder替换为用户指定的实际路径。
我想知道是否有更好的方法可以做到这一点? Wix会提供我可以使用的任何东西吗?
谢谢,
答案 0 :(得分:5)
您可以利用标准WiX SQL extension。例如,SqlString元素提供了一个选项,用于指定在安装时执行的SQL查询。 SqlDatabase元素提供了创建SQL数据库的开箱即用选项。两者分别接受@SQL和@Server属性的Windows Installer属性。这意味着您可以获取用户输入,将其保存到属性并在Sql元素中使用该属性。
答案 1 :(得分:1)
我最终通过使用动态SQL解决了这个问题。对于寻求解决方案的任何人,请检查以下问题的接受答案:
答案 2 :(得分:1)
扩展Yan的答案,如果你使用Sql扩展,那么语法非常简单 - 你需要为你的SQL数据库包含MDF和LDF(数据+日志文件),但是然后通过引用相同的文件名来附加它们。 / p>
以下假设sql express服务器将在localhost \ 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>
为简洁起见,我省略了此示例中的身份验证,但您也可以使用User元素指定要用于命令的Sql用户,并在SqlDatabase属性中引用User元素的Id
答案 3 :(得分:0)
你无法从WiX免费获得这个。
使用SqlString,一些参数和你注意到的直接使用CREATE DATABASE。你需要:
如果您希望使用SQL auth,您当然也需要传入DB_USER / DB_PASS
我强烈建议您编写自己的自定义操作来验证参数。