3

私のいくつかのプログラムを検出して更新する Wix インストーラーを構築したいと考えています。

システム上のいくつかのことを確認するための c# コード (別の DLL を使用) があります。次に、すべてのアプリの最新バージョンのテーブルをダウンロードし、更新する必要があるアプリを決定し、選択したアプリをダウンロードして更新します。もの。

私の質問は、Wix は次のアクションを実行できるかということです。

1) c# を使用して別の dll 呼び出しを実行しますか?

2) Web からファイルをダウンロードして解析します (たとえば、C# も使用します)。

3)リンクに移動して、MSI\EXE をダウンロードしますか?

4) MSI\EXE をインストールしますか (サイレント モードで実行するとします)。

5)システムから古い他のアプリをアンインストールしますか?

4

3 に答える 3

5

Windows インストーラーには、マシンごとに 1 つの実行シーケンスとプロセスごとに 1 つの UI シーケンスのみを許可するミューテックスがあります。この制限により、ある MSI は別の MSI をインストールできません。これには裏技がありますが、適切な設計に従っていません (適切な昇格のサポートやサイレント インストール/アンインストールのサポートを提供しないでください)。

カスタム アクションは注意して使用する必要があります。適切に設計されたカスタム アクションは、Windows インストーラーに組み込まれている標準アクションのように動作する必要があります。これは、可能な限りトランザクション インストールをサポートし、カスタム テーブルを介してデータ駆動型にすることです。

あなたが説明している必要があることのより良い候補は、おそらく WiX の書き込み機能などのブートストラップ/チェイナーでしょう。

于 2013-07-31T20:34:03.590 に答える
2

1) - 間違いなくそうです

2)-5)それを行うこともできますが、「カスタムブートストラッパー」および「インストール後のカスタム構成マネージャー」とは異なるmsiを使用する必要があります。一般的なルール: msi パッケージは、リソース (通常はファイル。より複雑な場合 - レジストリ、ほとんどの場合 sql オブジェクト) のアトミック展開にのみ使用します。他のすべての機能を msi の外に移動します (つまり、wix のみを使用して msi をビルドします。ブートストラップと構成ツール用のカスタム ユーティリティを作成します。3 つの部分を統合する方法については、wix サンプルを参照してください)。

于 2013-07-31T20:34:26.710 に答える
1

1) はい。ただし、.NET 3.5 に依存していて、.NET 4 のボックスを使用している場合、カスタム アクションを実行できないことに注意してください。これに加えて、カスタム アクション dll が msi から %TEMP% フォルダーに解凍されます。GAC に保存されていない他の dll に依存している場合、読み込みに失敗します。別の C++ dll などを持ち込む場合は、それをリソースとして C# dll に埋め込み、解凍して見つける必要があります。

2) 権利があることは何でもできます。

3) 確かに

4) 一度に実行できる MSI インストールは 1 つだけです。現在のインストールが終了するまで待機するには、いくつかの子プロセスを生成する必要があります。

5) そうですね。最も簡単な方法は、アップグレード テーブルを msi に追加して、このアップグレード コードを持つソフトウェアを単純にアンインストールすることです。これは、同時に 2 つの msis をアクティブにできる唯一の許可されたアクションです。RemoveExistingProductsアクションの InstallExecute Sequence テーブルを見てください。

于 2013-07-31T20:34:18.130 に答える