The properties [DATABASE_NAME]
and [SERVER_NAME]
are defined by the user at installation and it seems like unless they are hard coded then doing this fails:
<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>
The bit that is supposed to drop the db is DropOnUninstall="yes"
I've found a post on the WiX user group suggesting the following approach to dropping the database on uninstall:
<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>
The idea being that at uninstall the DROP DATABASE ...
command is executed on the master
database on the server. However this SQL statement never gets executed on the server.
The MSIEXEC log doesn't seem to give any information and I get no errors.
Has anyone successfully achieved this (before I write a custom action to do this)?
I've tried copying the database name and server to the registry to cache them, but this hasn't helped.