1

私が持っているもの:

  1. msi-package (services.msc にリストされている) を介してサービスをロールアウトする目的
  2. サービスはカスタム dll を使用しています
  3. を使用したカスタム アクションを含む InstallExecuteSequence
    • <... After="InstallFinalize">NOT Installed</Custom>インストール用
    • <... Before="InstallInitialize">Installed</Custom>アンインストール用
  4. これまで、サービスは、msi パッケージを使用せず、アプリケーションとして登録されていないワークステーションに手動でインストールされていました (そのため、appwiz.cpl には表示されません)。

どうしたの:

  • (以前のインストールからの)サービスが実行されている場合、ファイルがコピーされる前にサービスを停止する方法がわかりません(もちろん、dllを更新するための基本的な要件は、タスクがそれらを使用していないことです)
  • (以前のインストールからの)サービスが実行されていなくても、ファイルは更新されません

だから私が欲しいもの:

  • 4) からの既存のインストールを、新しい dll などを含む新しい msi パッケージで上書きしたいだけです。

解決策は何ですか:

ええ、すぐに私のテキストの下に立つことを願っています:) タイトルがあまり良くないかもしれません.

4

2 に答える 2

1

自分がいる場所から抜け出すための最も簡単な方法は、ServiceInstall要素とServiceControl要素(両方の値を持つ属性を削除)を使用してサービスを定義するインストーラーを作成することです。参照カウントがすべて台無しにならないように、以前は使用されていなかった新しいディレクトリにファイルをターゲティングします。RemoveFile要素を使用して、ファイルの古いインストールを適切に削除します。目標は、フォールドファイルを削除してアップグレードし、すべてを削除してアンインストールできるようにすることです。

古いファイルが同じディレクトリに一貫してデプロイされていない場合は、既知のディレクトリのリストを作成して重複するRemoveFileステートメントを作成するか、ファイルを検索して削除するカスタムアクションを作成する必要があります。(最適ではない)

于 2012-05-31T17:42:04.117 に答える
0

ServiceControl 要素: すばらしいことですが、同様の問題がありました: msi-package の実​​行中に以前に (手動で) インストールされたサービスがまだ実行されている場合、何をすべきかを尋ねるポップアップが表示されます (サービスの停止、キャンセルなど)。

最終的に、以前のバージョンをアンインストールするという懸念を、新しいインストール ルーチンから分離することになりました。msi-packageが実行される前に実行されるバッチスクリプトを簡単に作成しました。

于 2012-06-29T13:34:28.113 に答える