プロパティ[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 ログは情報を提供していないようで、エラーは発生しません。
これを成功させた人はいますか (これを行うためのカスタム アクションを作成する前に)。
データベース名とサーバーをレジストリにコピーしてキャッシュしようとしましたが、これは役に立ちませんでした。