0

プロパティ[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 ログは情報を提供していないようで、エラーは発生しません。

これを成功させた人はいますか (これを行うためのカスタム アクションを作成する前に)。

データベース名とサーバーをレジストリにコピーしてキャッシュしようとしましたが、これは役に立ちませんでした。

4

1 に答える 1