我正在尝试让WIX在用户指定的位置创建数据库。我使用一些CustomActions并将参数传递给sql脚本,大部分都在工作。但是我在尝试创建数据库的目录上遇到了权限问题。
寻找这个问题的解决方案让我看到了今天之前我没见过的帖子(Wix: create a sql server database at a specified location),似乎有人完成了我想要做的事情。
从该帖子中不清楚用户是如何调用脚本的?我希望他们正在做类似下面的代码片段,我只是不知道如何将值传递给脚本。如果是这样,那将大大简化我的任务。
<sql:SqlDatabase>
<sql:SqlScript>
</sql:SqlDatabase
有人可以告诉我如何在不使用customAction通过sqlcmd.exe调用脚本时将值传递给SqlScript吗?
感谢。
答案 0 :(得分:1)
对于希望这样做的任何其他人的未来参考,有几种方法可以在指定位置创建数据库。最简单的是使用我不知道的wix标签:
<sql:SqlFileSpec Name="DataBaseFile" Id ="mdfFile" Filename = "[DBDIR]TestDataBase.mdf"/>
<sql:SqlLogFileSpec Name="DataBaseLogFile" Id ="ldfFile" Filename = "[DBDIR]TestDataBase_Log.ldf"/>
只要创建数据库的目录不在“Program Files”或“Program Files(x86)”下,这就完美无缺。这两个位置似乎都具有特殊权限,不允许SQL Server在那里创建数据库。可以通过尝试使用Sql Server Mgmt Studio在Program Files下的某个文件夹中创建数据库并查看生成的错误来测试该理论。这对我来说是这样的:
CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file
我仍在试图弄清楚安装程序如何在Program Files下放置数据库,因为我确信之前已经完成了。