2012-07-12 75 views
0

我正在尝试创建一个将安装SQL Server数据库的.msi文件。我有以下代码,但是当我在虚拟机上运行.msi时,数据库不会显示在VM上的SQL Server Management Studio中。我错过了什么?如何使用Wix创建SQL Server数据库

<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中单独运行脚本的数据库中创建,这进一步增加了我的疑问是,维克斯代码工作。

回答

1

我总是设置CreateOnInstall =“是”,因为它会再创建数据库的你,如果它不存在,或者给你一个refernce到它,如果它。同时设置ContinueOnError =“no”,以便向用户显示任何错误。

最大的潜在问题是您用来运行脚本的用户。它正在被创建,除非你授予它管理员权限(这是你的样子),它将不具备所需的权限。我将我的sql脚本作为sa运行,然后为应用程序创建受限访问用户。

至于服务控制,上面的注释告诉你它在做什么! ;)

相关问题