1

AddIn Express .Net コンポーネントを使用して Excel アドインを作成しました。ビジネス ユーザーは、ビルド チームが提供する MSI を使用してアドインをインストールします。製品に変更を加えてビジネス ユーザーに提供するたびに、既存のアドインを手動でアンインストールしてから、更新された MSI を使用して新しいアドインをインストールする必要があります。

Windowsバッチファイル、scriptcs、または小さなC#コンソールプログラムを使用して、このプロセスを自動化できる方法があるかどうかを知りたいと思いました。理想的には、既存のアドインをアンインストールし、アンインストール プロセスが完了するのを待ってから、新しいアドインをインストールする必要があります。

Msiexec、scriptcs などを使用して複数のオプションを試しましたが、これまでのところ成功していません。私の主な問題は、既存のアドインのアンインストール プロセスが開始されると、すぐに新しいアドインのインストールが開始され、「インストールは既に進行中です...」という標準の Windows メッセージが表示されることです。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

私はすでに同様の質問に答えました。

Windows バッチ ファイルがコマンドの完了を待機しない

通常、次の 2 行のバッチ ファイルがある場合:

call msiexec /x {...} /qb
call msiexec /i "c:\myPath\myProduct.msi" /qb

インストールが開始される前にアンインストールが待機するという意味で機能するはずです。

  • 「呼びかけ」が大事!
  • 以前のバージョンをアンインストールするには/x {ProductCode to fill in}/x "filename". いずれの場合も、製品コードを使用する方が安全です。
  • 何が起こるかを確認するためにpause、2 つの行と最後に行を追加できます。

それでも問題が解決しない場合は、製品が実際にアンインストールされるまでループし、2 秒待ってからインストールを続行してください。

プログラムがまだインストールされているかどうかを確認する方法はいくつかあります。

ほとんどの人は、最も簡単なソリューションとして VB スクリプトを推奨しますが、少なくともこれらは最もよく知られています。別の質問からのアンインストール呼び出しに対する saschabeaumont からの VBS スニペットを次に示し ます。「この製品の別のバージョンが既にインストールされているため、MSI インストールが失敗します」

主に与えられた商品名(部分)のProductCodeを探し出し、一致すればアンインストールを開始します(部分一致に注意)。アンインストールが既に完了している場合 (= 製品がインストール済み製品のリストに含まれていない場合) は、同じ目的で使用し、アルゴリズムをもう一度コピーして非同期に要求することができます。

もちろん、JScript、Powershell、および従来のプログラミング言語など、他のスクリプト言語でも可能です。純粋なバッチ スクリプトで実行するのは困難です。たとえば、製品がインストールされている場合、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallの下の ProductCode レジストリ エントリをテストできます。ただし、言及すべき欠点が 1 つだけあります。バッチが 32/64 ビット サブシステムから開始された場合や MSI が 32/64 ビットである場合は、違いを考慮する必要があります。したがって、バッチの代わりに VBS を使用することをお勧めします (バッチから で呼び出すことができますcscript xxx.vbs)。

于 2014-09-24T15:29:37.547 に答える