WIX - 无法创建SQL数据库或运行SQL脚本

时间:2014-08-05 22:54:26

标签: wix windows-installer

我是WIX的新手,我在执行SQL脚本时遇到了一些问题。我查看过一些帖子,但没有一个有效。我也查找了任何有用的SQL Server日志,但我找不到任何。我在安装日志中收到的错误消息是......

CreateDatabase:错误0x80004005:无法创建数据库:' MVDB',错误:未知错误 错误26201.错误-2147467259:无法创建SQL数据库:MVDB,错误详细信息:未知错误。 MSI(s)(A4!F4)[13:21:44:978]:产品:Guru 6 - 错误26201.错误-2147467259:无法创建SQL数据库:MVDB,错误详细信息:未知错误。

CustomAction CreateDatabase返回实际的错误代码1603(请注意,如果在沙箱中发生翻译,这可能不是100%准确)

如果我进入SQL Server管理控制台,我可以创建数据库并使用我在执行安装程序时登录的同一用户运行所有脚本。

我的代码看起来像这样......

                                       

<DirectoryRef Id="SERVER">
  <Component Id='Server.exe' Guid='8027388d-0f90-465b-9668-d1388977caaa'>
    <File Id='Server.exe' Source='C:\VS Publish\ProgramFiles\Server\Server.exe' KeyPath='yes'/>
    <ServiceInstall 
      Id="ServiceInstaller" 
      Type="ownProcess" 
      Name="Service" 
      DisplayName="Service" 
      Description="Provides media distribution, data coordination, and licensing services to the  application" 
      Start="auto" 
      Account="[SERVICEACCOUNT]" 
      Password="[SERVICEPASSWORD]" 
      ErrorControl="normal" 
      />
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="Service" Wait="yes" />
    <util:User Id="SQLUser" Name="[ComputerName]\[%USERNAME]" CreateUser="no"/>
    <sql:SqlDatabase Id="SqlDatabase" Database="MVDB" Server=".\MVSQLEXPRESS" Instance="MVSQLEXPRESS" 
        CreateOnInstall="yes" DropOnUninstall="yes" ContinueOnError="no" User="SQLUser">
      <sql:SqlScript Id="CreateDatabase" ExecuteOnInstall="yes" BinaryKey="CreateDatabaseSql" />
      <sql:SqlScript Id="CreateUsers" ExecuteOnInstall="yes" BinaryKey="CreateUsersSql" />
      <sql:SqlScript Id="CreateBaseLineDb" ExecuteOnInstall="yes" BinaryKey="CreateBaseLineDbSql" />
      <sql:SqlScript Id="RemoveOldContent" ExecuteOnInstall="yes" BinaryKey="RemoveOldContentSql" />
      <sql:SqlScript Id="Upgrade" ExecuteOnInstall="yes" BinaryKey="UpgradeSql" />
      <sql:SqlScript Id="AddCompleteMedia" ExecuteOnInstall="yes" BinaryKey="AddCompleteMediaSql" />
      <sql:SqlScript Id="InstallContent" ExecuteOnInstall="yes" BinaryKey="InstallContentSql" />
      <sql:SqlScript Id="UpdateCustomPlayList" ExecuteOnInstall="yes" BinaryKey="UpdateCustomPlayListSql" />
      <sql:SqlScript Id="InstallFeaturedContent" ExecuteOnInstall="yes" BinaryKey="InstallFeaturedContentSql" />
    </sql:SqlDatabase>
  </Component>

我也用过......

<util:User Id="SQLUser" Name="[%USERNAME]" Domain="[ComputerName]" CreateUser="no"/>  

我还尝试从sql:sqldatabase条目中完全删除用户。我已经检查过为该实例启用了所有网络协议,并且有足够的磁盘空间用于数据库。

我只是尝试将CreateOnInstall和DropOnUninstall都设置为no并执行SQL脚本来创建数据库,但是你不能将它们都设置为&#34; no&#34;。

更新: 我更改了util:user以使用sa作为用户并且它有效。所以问题肯定是权限问题。 问题是我必须能够使用Windows身份验证。创建数据库时,标志设置为以管理员身份创建当前用户(ADDCURRENTUSERASSQLADMIN =&#34; True&#34;)。此外,我可以将当​​前用户视为管理员。 如何让WIX使用当前用户创建数据库?

我将不胜感激任何帮助!!

谢谢, 加里

1 个答案:

答案 0 :(得分:0)

我已经通过将sqldatabase元素移到组件之外来解决了这个问题。通过这样做,安装程序不会尝试创建数据库(我有一个脚本),我不再需要until:user,安装程序似乎正在使用当前用户来运行SQL脚本。

加里