Wix:在指定位置创建一个sql server数据库

时间:2011-04-11 16:53:54

标签: sql-server wix

我使用Wix创建了一个安装程序。我希望能够指定安装sql server的位置。我能想到的一个解决方案是在CreateDatabase脚本中放置一个占位符,并在运行时将placeholder替换为用户指定的实际路径。

我想知道是否有更好的方法可以做到这一点? Wix会提供我可以使用的任何东西吗?

谢谢,

4 个答案:

答案 0 :(得分:5)

您可以利用标准WiX SQL extension。例如,SqlString元素提供了一个选项,用于指定在安装时执行的SQL查询。 SqlDatabase元素提供了创建SQL数据库的开箱即用选项。两者分别接受@SQL和@Server属性的Windows Installer属性。这意味着您可以获取用户输入,将其保存到属性并在Sql元素中使用该属性。

答案 1 :(得分:1)

我最终通过使用动态SQL解决了这个问题。对于寻求解决方案的任何人,请检查以下问题的接受答案:

SQL Server: use parameter in CREATE DATABASE

答案 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。你需要:

  • DB_SERVER
  • DB_INSTANCE
  • DB_PORT
  • DB_DATA_FOLDER
  • DB_LOG_FOLDER

如果您希望使用SQL auth,您当然也需要传入DB_USER / DB_PASS

我强烈建议您编写自己的自定义操作来验证参数。

  • 本地计算机上是否存在服务器/实例?虽然您始终可以远程连接到SQL服务器并告诉它在给定驱动器上安装文件,但这使得更难以提前验证有关这些驱动器的任何内容。
  • 使用给定的服务器/实例/端口和凭据可以连接到sql server主数据库,甚至可以检查事先创建数据库的权限。你可以逃避不使用Port,但是一些DBA仍然通过默默无闻来保护安全。
  • 您是否获得了有效的数据/日志文件夹。实际存在的驱动器的生根路径。
  • 验证Data / Log文件夹驱动器上的足够空间也是一个好主意。我遇到了大量的客户,他们没有检查并查看带有空D:数据驱动器的小型C:驱动器上的数据文件。我通常会将最小可用空间和最小可用空间(例如磁盘上至少25%的可用空间)组合在一起