2013-03-07 60 views
0

性质[DATABASE_NAME][SERVER_NAME]通过在安装用户定义的,它似乎像,除非它们被硬编码然后做失败:DROP DATABASE

<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日志似乎没有提供任何信息,我也没有得到任何错误。

有没有人成功地实现了这个(在我写一个自定义操作来做到这一点之前)?

我试着将数据库名称和服务器复制到注册表来缓存它们,但是这并没有帮助。

+0

你安装,例如在任何地方缓存DATABASE_NAME和SERVER_NAME财产注册表?您可能需要扩展卸载程序以在卸载期间从本地状态重新读取此属性,否则该值将仅为null或来自Property表的默认值,并且不起作用。 – 2013-03-11 12:50:39

+0

我试着在注册表中缓存它们。这似乎没有效果。 – briantyler 2013-03-11 13:12:33

回答

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">   

这肯定会工作.....