【问题标题】:WIX - Unable to create a SQL database or run SQL scriptsWIX - 无法创建 SQL 数据库或运行 SQL 脚本
【发布时间】:2014-08-07 01:24:06
【问题描述】:

我是 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 脚本来创建数据库,但您不能将两者都设置为“no”。

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

我将不胜感激!

谢谢, 加里

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

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

    加里

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多