問題タブ [dtf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
117 参照

c# - 長時間実行されている遅延 DTF カスタム アクションのキャンセルをトラップするにはどうすればよいですか?

一連の .RDL ファイルを SQL Server レポート Web サービスにパブリッシュする、DTF で記述された遅延カスタム アクション DLL があります。すべてがうまく機能しており、さまざまな Try Catch ブロックでほとんどのエラー状態をトラップできます。

私が問題を抱えている唯一のことは、公開中にユーザーがインストーラーの [キャンセル] ボタンを押した場合です。インストールをキャンセルするかどうかを尋ねるメッセージがすぐにポップアップ表示されますが、「はい」と答えると、次のメッセージがスローされます。

タイプ Microsoft.Deployment.WindowsInstaller.InstallCanceledException の例外がスローされました

OKボタンだけです。

の特別な例外ハンドラーを追加しようとしました

他の例外よりも前ですが、この特定の例外をキャプチャしていないようです。

長時間実行されている Deferred Custom Action のキャンセル中に InstallCanceledException を処理する方法について何か提案はありますか?

製品チームはアプリケーションの 1 つを使用することを検討しましたが、通常のユーザーがアプリケーションを実行し、Web サービスの URL を知っているとは限らず、レポートを Web サービスに公開する権限を持っているとは限りません。これを入れたインストーラーは通常、SQL スクリプトを実行するために使用され、レポートを公開するためにインストーラーに 2 つ目の機能を追加しています。それは実際にうまく機能しすぎて、今それを放棄することはできません。製品は私がすでに行ったことを見ており、彼らはそれを気に入っています. MSI プログレス バーは、公開されるたびに各レポートの名前で更新されます。MSI は URI とユーザー資格情報の入力を求めますが、.RDL ファイルが格納されているフォルダーは既に認識されています。ユーザーが [次へ] ボタンをクリックすると、URI で検証を実行するので、実行シーケンスで Deferred アクションを実行するまでに適切な URI と資格情報。私' パブリッシュが行われている間に VPN から切断すると、適切なエラーで失敗することさえありました。文字通り、ユーザーがキャンセルを押したときにのみ、それをトラップできないように見えますが、この作業が終了するのはショーストッパーでもありません。

いつでもキャンセルしても問題ないため、キャンセル ボタンを非表示にすることは適切なオプションではありません。

私もクラスでこれらを持っています

0 投票する
2 に答える
135 参照

c# - DTF と MSI API の両方を使用する C# では見つからないのに、vbs で INSTALLLOCATION を見つけられるのはなぜですか?

VBS は希望どおりに動作しますが、C# を使用する COM API と DTF の両方が InstallLocation を見つけられません。以下は、私がこれまでに行ったことです。


この投稿のおかげで、vbs を使用してレジストリで使用できない InstallLocation を見つけることができました。vbs が で利用可能な COM API を呼び出していることを理解しています %WINDIR%\system32\msi.dll


C# COM API

そこで、C# を使用してこのメ​​ソッドを呼び出すことにしました。しかし、それは失敗しました。存在とインストールは確認できますが、製品 GUID の 1 つを開くことができません (3 回確認しました)。

注: 例外をスローしない製品があり、InstallLocation は適切に検出されました。すべてではありません。

以下は私のコードです。

うまくいきませんでした。DTF を試してみましょう。


C# DTF

しかし、それもうまくいきませんでした。以下は私のコードです。これは例外をトリガーせず、COM API 経由で検出できなかったものでさえ、それ自体を検出できましたが、InstallLocation プロパティは空の文字列でした。

注: InstallLocation プロパティが入力されている製品がありました。すべてではありません。

C# のどちらも検出できないのに、VBS が InstallLocation を検出できるのはなぜですか? 私は何が欠けていますか?

VBS が使えないのは、vb.net を使わないと try catch が使えないからです。