我正在尝试创建一个将安装SQL Server数据库的.msi。我有以下代码但是当我在虚拟机上运行.msi时,数据库不会显示在VM上的SQL Server Management Studio中。我错过了什么?
<Directory Id="TARGETDIR" Name="SourceDir" ComponentGuidGenerationSeed="MYGUID-AEAC-4fdf-86D0-05B33BAD4550">
<Component Id="SqlScripts" Guid="MyGUID-A87F-42D2-B6E7-BD8790548625">
<util:User Id="SQLUser" Name="User" Password="password" CreateUser="yes" UpdateIfExists="no"/>
<sql:SqlDatabase Id="SQLDatabase" Database="MyDatabase" User="SQLUser" Server=".\SQLEXPRESS"
CreateOnInstall="no" CreateOnUninstall="no" CreateOnReinstall="no" ConfirmOverwrite="no"
DropOnInstall="no" DropOnReinstall="no" DropOnUninstall="no" ContinueOnError="yes">
<sql:SqlScript Id="MyDatabase" BinaryKey="MyDatabase" ExecuteOnInstall="yes" ExecuteOnReinstall="no" ExecuteOnUninstall="no" ContinueOnError="no" Sequence="4"/>
</sql:SqlDatabase>
<!-- stops and restarts World Wide Web Publishing Service (W3SVC) during the install or uninstall -->
<ServiceControl Id="ServiceControlWebSite" Name="W3SVC" Start="both" Stop="both" Wait="yes" />
</Component>
</Directory>
<Binary Id="MyDatabase" SourceFile="myDatabase.sql"/>
<Feature Id="Complete" Title="Setup" Level="1">
<ComponentRef Id="SqlScripts" />
</Feature>
我不知道服务控制是什么,但我认为没有任何问题。
Wix应该创建数据库还是脚本应该这样做?目前,该脚本创建表并插入数据。我也试过用脚本创建数据库,但没有任何反应。我怀疑是否因为没有创建任何代码而执行。
当我在SQL Server Management Studio中单独运行脚本时,会创建数据库,这进一步增加了我对Wix代码工作的怀疑。
答案 0 :(得分:1)
我总是设置CreateOnInstall =“yes”,因为它会为你创建数据库(如果它不存在)或者如果它存在则引用它。同时设置ContinueOnError =“no”,以便向用户显示任何错误。
最大的潜在问题是您用来运行脚本的用户。它正在创建,除非你给它管理员权限(你不是它的外观),它将没有所需的权限。我将sql脚本作为sa运行,然后为应用程序创建一个受限访问用户。
至于服务控制,上面的评论告诉你它正在做什么! ;)