3

インストール済みのパッケージ化された 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 &gt; "[DBLogs]test.log"'
              Return="check" Execute="deferred" Impersonate="yes" />

最後に、&gt; "[DBLogs]test.log"(理論的には) 出力をその場所のファイルにリダイレクトする必要がありますが、代わりに、コンソール ウィンドウが表示された時点でインストーラーが失敗します。表示された瞬間にコンソールにテキストが表示されないようです。

キッカーは次のとおりです。エラーでログに記録されたコマンドをコピーし (&gt;適切に解決されて>)、自分のcmdウィンドウに貼り付けると、実行されてログに記録されます。

私は何を間違っていますか?

さらに重要なことは、このコマンドを実行して+stdoutstderrログファイルに保存するにはどうすればよいでしょうか?

注: タイプ 34 構文でもこれを試しました (この方法ではタイプ 50 に解決されます)。どちらも同じ動作を示します。

4

3 に答える 3

1

EXE カスタム アクションには、いくつかの問題があります。読んだ:

EXE カスタム アクションの統合のハードル

stderr/stdout を含むこれらの問題のいくつかに対処するために、Wix にはQuiet Execution Custom Actionが含まれています。

于 2013-06-05T12:49:37.117 に答える
1

WIX MSI インストール中に SqlPackage.exe の出力をログに記録したいという同じ問題が発生したため、標準出力/エラーの取得を処理し、それを sqlpackage.exe のファイルに記録する WIX バイナリ拡張を作成しました。

https://wixdacpacinstaller.codeplex.com/で確認してください。

フリーでオープンソースにしました。

使用方法を示すドキュメントのクイック スニペット:

<!-- first, add the binary extension.  Be sure to specify the source file as WixDacPacExtension.CA.dll. -->
<Binary
     Id="WixDacPacExtensionBinary"
     SourceFile="<Path to your file>\WixDacPacExtension.CA.dll"/>

<!-- Create a custom action to run first and set up all the parameters that are -->
<!-- passed to the Wix DacPac Extension.  The property name MUST MATCH -->
<!-- the name of the custom action that executes the binary defined above. -->
<!-- The parameters in the Value property are semi-colon delimited. -->
<CustomAction
     Id="SetupDacPacWIXDacPacInstallerExampleCustomAction"
     Property="DacPacWIXDacPacInstallerExampleCustomAction" 
     Value="ShowUI=True;SqlPackagePath=c:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\SqlPackage.exe;DacPacPath=[INSTALLFOLDER]WIXDacPacInstallerExample.dacpac;LogFilePath=[TempFolder]\WIXDacPacInstallerExample.dacpac.log;TargetServerName=[DATABASESERVER];TargetDatabaseName=WIXDacPacInstallerExample;OtherParameters=/p:RegisterDataTierApplication=True /p:BlockWhenDriftDetected=False /p:BlockOnPossibleDataLoss=False"
        />

<!-- 
     This custom action will execute the extension with the parameters from Step #1.
     NOTE: the Id of this custom action matches the Property of the custom action
          from Step #1.
-->
<CustomAction
     Id="DacPacWIXDacPacInstallerExampleCustomAction"
     BinaryKey="WixDacPacExtensionBinary"
     DllEntry="Execute"
     Execute="deferred"
     Return="check"
/>
于 2016-03-01T16:33:11.347 に答える
0

出力 (標準とエラーの両方) を非標準の方法でルーティングする SQLPackage.exe について何かがあると思います。PowerShell から SQLPackage.exe を実行するときに問題が発生し、問題も発生しました。何をしても、PowerShell で SQLPackage.exe からの出力を取得できませんでした。最終的に、Invoke-Expression の代わりに Start-Process コマンドレットを使用して SQLPackage.exe を実行し、-RedirectStandardOutput $out と -RedirectStandardError $errorLog を渡すことで問題を解決できました。このようにして、少なくとも出力をキャプチャすることはできましたが、エラーが発生した場合でも、エラー リダイレクトと一緒にリダイレクトされず、標準出力ストリームにリダイレクトされることに気付きました。なぜこれが起こるのか正確にはわかりませんが、これは WiX での結果に関連しているようです。

どのようにして SQLPackage を WiX インストールに組み込むことができたのか、詳しく知りたいです。共有できる情報や、これにどのように取り組んだかについてのリソースはありますか?

于 2014-01-03T17:14:11.727 に答える