インストール済みのパッケージ化された SQL アプリケーションをデータベースSqlPackage.exe
にデプロイするために、WiX インストーラーをすべて装備して実行しています。.dacpac
次のようにデータベース ファイルを実際にデプロイすると、成功します。
<Property Id="CONNSTRING" Value="Data Source=localhost;Integrated Security=True;Initial Catalog=MPQS-DACPAC" />
<Property Id="SQLPACKAGEPATH" Value="C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" />
<CustomAction Id="DeployDatabase" Property="SQLPACKAGEPATH"
ExeCommand='/Action:Publish /tcs:"[CONNSTRING]" /sf:"[#My.Database.dacpac]" /p:BackupDatabaseBeforeChanges=True /p:RegisterDataTierApplication=True'
Return="check" Execute="deferred" Impersonate="yes" />
<InstallExecuteSequence>
<Custom Action="DeployDatabase" After="DuplicateFiles">NOT REMOVE</Custom>
</InstallExecuteSequence>
...そして、表示されたコンソール ウィンドウで、インストール中に出力を見ることができます。
ただし、常に成功するとは限りません。たとえば、CONNSTRING
ダイアログで指定できますが、正しくない可能性があります。エラーがある場合、それらは一瞬表示され、その後コンソールが閉じ、ログに 1722 エラーが記録されます。
コンソール出力をキャプチャするために、次のことを試しました。
<CustomAction Id="DeployDatabase" Property="SQLPACKAGEPATH"
ExeCommand='/Action:Publish /tcs:"[CONNSTRING]" /sf:"[#My.Database.dacpac]" /p:BackupDatabaseBeforeChanges=True /p:RegisterDataTierApplication=True > "[DBLogs]test.log"'
Return="check" Execute="deferred" Impersonate="yes" />
最後に、> "[DBLogs]test.log"
(理論的には) 出力をその場所のファイルにリダイレクトする必要がありますが、代わりに、コンソール ウィンドウが表示された時点でインストーラーが失敗します。表示された瞬間にコンソールにテキストが表示されないようです。
キッカーは次のとおりです。エラーでログに記録されたコマンドをコピーし (>
適切に解決されて>
)、自分のcmd
ウィンドウに貼り付けると、実行されてログに記録されます。
私は何を間違っていますか?
さらに重要なことは、このコマンドを実行して+stdout
をstderr
ログファイルに保存するにはどうすればよいでしょうか?
注: タイプ 34 構文でもこれを試しました (この方法ではタイプ 50 に解決されます)。どちらも同じ動作を示します。