以前のリリースの 1 つでサービス コンポーネントを 2 回インストールしました。
<Component Id="MyServiceWin7" Guid="{GUID_WIN7}">
<File Id="mysvc_Win7"
Name="mysvc.exe"
Source=mysvc.exe"
KeyPath = "yes"/>
<ServiceControl Id="MYSVC_Win7"
Name="MYSVC"
Remove="uninstall"
Start="install"
Stop="both"
Wait="no" />
<ServiceInstall Id="My_Svc_Win7"
Name="MYSVC"
DisplayName="MYSVC"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
LoadOrderGroup=""
Description="My service">
</component>
<Component Id="MyServiceWin8" Guid="{GUID_WIN8}">
<File Id="mysvc_Win8"
Name="mysvc.exe"
Source=mysvc.exe"
KeyPath = "yes"/>
<ServiceControl Id="MYSVC_Win8"
Name="MYSVC"
Remove="uninstall"
Start="install"
Stop="both"
Wait="no" />
<ServiceInstall Id="My_Svc_Win8"
Name="MYSVC"
DisplayName="MYSVC"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
LoadOrderGroup=""
Description="My service">
</component>
したがって、MYSVC コンポーネントの 2 つのインスタンスが存在します。どちらも MYSVC.exe にマッピングされています。
以前のリリースでは、OS バージョンの条件チェックを見逃していました。
正常に実行されます。
次回のアップデートでダミーの追加コンポーネント(GUID_Win7またはGUID_WIN8)を削除しようと考えています。
どうすれば削除できますか? カスタム アクションを作成する必要がありますか?
どんな助けでも大歓迎です。
編集:: 答えを見つけてください、
mysvc には、Win7 および Win8 に固有のサード パーティ ライブラリ依存関係があります。これは、sc qc mysvc を確認すると、正常にインストールされたことを意味します。サービスが作成され、mysvc.exe がサービス binpath にマップされます。
はい、これら 2 つのサービス コンポーネントは同じ宛先をターゲットにしており、sc query mysvc を実行すると、コンポーネントは 1 つだけです。
- いいえ、サービスのエントリは 1 つだけです。mysvc.exe はディスク上の win8 バージョンです。
提案をありがとう、その壊れたリンク。
現在、win 7 と win8 の両方に %ProgramFiles%\MyApp\mysvc.exe 共通パスがあります。だから私の質問は、前のリンクを壊すために新しい共通パスを作成するかどうかです。ProgramFiles%\MyApp\mysvc\mysvc.exe [[NEW_GUID1]] for win7 ProgramFiles%\MyApp\mysvc\mysvc.exe [[NEW_GUID2]] for win8
[[OLD_GUID1]] 、[[OLD_GUID2]] を持つコンポーネントは、私の製品がアンインストールされるまで永遠にシステム上にあるため、[[OLD_GUID1]]、[[OLD_GUID2]] を持つコンポーネントを削除して古い (機能しない) コンポーネントをクリーンアップすることはできません。
ありがとう