属性[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日志似乎没有提供任何信息,我没有错误。
有没有人成功实现过这个目标(在我编写自定义操作之前)?
我已经尝试将数据库名称和服务器复制到注册表以缓存它们,但这没有帮助。
答案 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">
这肯定会奏效......