从WiX安装程序中删除数据库

时间:2013-03-07 15:29:15

标签: database wix wix3.6

属性[DATABASE_NAME][SERVER_NAME]是由用户在安装时定义的,除非它们是硬编码的,否则执行此操作会失败:

 <Component Id="Component.Sql.Database" Guid="*">
    <sql:SqlDatabase 
      Id="Sql.Database" 
      Database="[DATABASE_NAME]"
      Server="[SERVER_NAME]" 
      CreateOnInstall="yes" 
      DropOnUninstall="yes"
      ContinueOnError="no"
      ConfirmOverwrite="yes" />
</Component>

应该删除数据库的位是DropOnUninstall="yes"

我在WiX用户组上发现了一条帖子,建议在卸载时删除数据库的方法如下:

  <Component Id="Component.Sql.DropDatabase" Guid="146CD264-1F6D-4E19-BFCC-E544F5BD2D6C">
    <sql:SqlString
      Id="Sql.DropDatabase"
      SqlDb="Sql.Master"
      Sequence="1000"
      ExecuteOnInstall="no"
      ExecuteOnUninstall="yes"
      ExecuteOnReinstall="no"
      ContinueOnError="no"
      SQL="DROP DATABASE [\[][DATABASE_NAME]\[]]"/>
  </Component>

  <Fragment>
    <sql:SqlDatabase Id="Sql.Master" Database="master" Server="[SERVER_NAME]" />
  </Fragment>

这个想法是在卸载时DROP DATABASE ...命令在服务器上的master数据库上执行。但是,这个SQL语句永远不会在服务器上执行。

MSIEXEC日志似乎没有提供任何信息,我没有错误。

有没有人成功实现过这个目标(在我编写自定义操作之前)?

我已经尝试将数据库名称和服务器复制到注册表以缓存它们,但这没有帮助。

1 个答案:

答案 0 :(得分:0)

    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"  <!-- Need to import this -->
    xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension"><!-- Need to import this -->


<sql:SqlDatabase Id="SqlDatabase" 
             Database="TestDatabase" 
             Server="[SQLSERVER]" 
             DropOnUninstall="yes" 
             User="SQLUser">        

这肯定会奏效......