サービスをインストールする MSI インストーラーがありますが、デフォルトでは停止しています。ユーザーは手動でオンにすることも、停止したままにすることもできます。MSI のパッチもあります。
問題: パッチをインストールすると、サービスが停止します。パッチがオンの場合はサービスをオンのままにし、オフの場合はサービスをオフにしたいと思います。どうすればこの機能を実現できますか?
サービスをインストールする MSI インストーラーがありますが、デフォルトでは停止しています。ユーザーは手動でオンにすることも、停止したままにすることもできます。MSI のパッチもあります。
問題: パッチをインストールすると、サービスが停止します。パッチがオンの場合はサービスをオンのままにし、オフの場合はサービスをオフにしたいと思います。どうすればこの機能を実現できますか?
パッチ適用の仕組みを理解している限り、これは想定されるデフォルトの動作です。
MSI パッケージを初めてインストールするとき (初期インストール)、サービスは停止した状態でインストールされ、MSI パッケージはシステムの特別な場所にキャッシュされます。パッチをインストールすると、パッチがインストール パッケージにもたらす変更がキャッシュされた MSI に適用されるため、必要な方法で変換され、パッケージが再インストールされます。したがって、最初のパッケージにサービスを停止してインストールする指示が含まれており、パッチの変更によってこれが変更されない限り、最初のインストール直後と同様に、コンポーネントが再インストールされ、サービスは最終的に停止されます。
この動作を変更するには、サービスを含むコンポーネントを としてマークしてみてくださいNeverOverwrite
。コンポーネントに設定NeverOverwrite='yes'
すると、パッチ適用時に再インストールされないため、既存のサービスはそのまま残り、パッチ適用前の状態のままになります。
最初のインストール パッケージで説明されている方法でコンポーネントを変更する必要があるかどうかはわかりません。新しいものに変更するとうまくいくことを願っています。そうしないと、製品の初期バージョンをすでに出荷している場合に問題になる可能性があります。
この正確なシナリオを試していないことを警告する必要があるため、最初にこの提案を確認することをお勧めします.
そのため、最終的に 2 つのカスタム アクションを使用しました。パッチをインストールする前にサービスのステータスを保存するもの。MYSERVICE_STATUS
サービスの場合は「0」、サービスの場合はSTOPPED
「1」に設定するなどのプロパティを使用しましたRUNNING
。
パッチのインストールが完了したら、これらのプロパティと各サービスの最終状態をチェックする別のカスタム アクションを起動します。MYSERVICE_STATUS == 1
サービスが現在それらである場合はSTOPPED
、再起動します。