1

わかりました。WiX を使用してサービスを展開する方法は知っていますが、次のジレンマを解決しようとしています。メジャー アップグレード時にサービス構成 (ログオン資格情報など) を保持したい (ユーザーがサービス設定を再定義する必要がないようにするため)。この目的のために、InstallExecuteSequence 内で以下を使用します。

<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>

ServiceControlStop属性を両方に設定しています。しかし、アプリをアンインストールすると、サービスが実行されている場合、次の警告が表示されます。

「セットアップは、システムの実行中に更新できないファイルまたはサービスを更新する必要があります。続行することを選択した場合、セットアップを完了するために再起動が必要になります。」

続行して再起動しないことを選択すると、サービスとすべてのアプリ ファイルの両方が削除されるため、このメッセージは完全に偽物に見えます。アンインストーラーを実行する前にサービスを手動で停止すると、警告は表示されません。

私は何か間違ったことをしていますか?メジャー アップグレード時にサービスが削除 (および再作成) されないようにしながら、この警告を回避するにはどうすればよいですか?

4

2 に答える 2

0

良い質問です。私が理解しているように、問題は、実行シーケンスの順序が次のとおりであるため、奇妙に思われる DeleteServices を処理した後、サービスが停止しないことです。

* StopServices
• DeleteServices
• RemoveFiles
• InstallFiles
• InstallServices
• StartServices

私はこれを試してみます:

<DeleteServices After="StopServices" Before="RemoveFiles">NOT UPGRADINGPRODUCTCODE</DeleteServices>
<InstallServices>NOT UPGRADINGPRODUCTCODE</InstallServices>

しかし、実際の問題については、これは少し怪しいように思えます。私が行うことは、レジストリに関する情報を保持するために必要なすべてのレジストリ キー/値を作成し、製品をアップグレードするために再度尋ねることではありません。後でその情報をサービスに再度渡すことができ、セットアップをいじる必要はありません (これは、プロパティ、コンポーネント条件、レジストリ検索で非常に簡単です)。

アップグレード時に新しいサービスを追加したい場合はどうすればよいですか? Ps、新しいユーザーを作成し、インストールの権限を割り当て、そのユーザーでログインしてサービスを受けることができます。覚えておくべきことがもっとあることは理解していますが、それほど複雑なことはありません。

于 2013-10-25T10:32:46.293 に答える