0

サービス アプリに Wix をインストールすると、このような問題が発生しました。「修復」オプションを選択すると、インストール後に PCを再起動するように求められます。実際、私のテスト インストールには 2 つのファイルしか含まれていません。インストーラーにサービスを停止させる属性がありますが(実際には、ログのためにサービスを停止してアンインストールします)、ファイルはまだサービスのプロセスでビジー状態です。私は何を間違っていますか?回避策はありますか?この場合、再起動のプロンプトを表示しないようにするにはどうすればよいですか? インストーラーのコードは次のとおりです。

<Fragment>
        <ComponentGroup Id="ProductComponents" Directory="AGENTFOLD">
            <Component Id="WindowsAgent" Guid="*">
        <File Id="WinAgent" KeyPath="yes" Source="WindowsAgent.exe"/>
        <ServiceInstall Id='WindowsAgentInst' Name='WindowsAgent' DisplayName='WindowsAgent' Type='ownProcess' Account='LocalSystem' Start='auto' ErrorControl='normal'/>
        <ServiceControl Id="WindowsAgentControl" Name="WindowsAgent" Stop="both" Start="install" Remove="uninstall" Wait="yes" />
      </Component>
      <Component Id="cmp2" Guid="GUIDHERE">
        <File Id="fil2" KeyPath="yes" Source="mydll.dll" />
      </Component>
        </ComponentGroup>
    </Fragment>

ログの内容は次のとおりです。

Info 1603. ファイル C:\Program Files(x86)\WindowsAgent\mydll.dll は使用中です。そのアプリケーションを閉じて、再試行してください。

MSI (s) (88:78) [17:01:50:993]: 製品: Setuptest。ファイル C:\Program Files (x86)\WindowsAgent\mydll.dll は次のプロセスで使用されています: 名前: WindowsAgent 、ID 3384。

Info 1603. ファイル C:\Program Files (x86)\WindowsAgent\WindowsAgent.exe は使用中です。そのアプリケーションを閉じて、再試行してください。

MSI (s) (88:78) [17:01:51:182]: 製品: Setuptest。ファイル C:\Program Files(x86)\WindowsAgent\WindowsAgent.exe は次のプロセスで使用されています: 名前: WindowsAgent 、ID 3384。

修理前に手動でサービスを停止すると、すべて正常に動作することに注意してください。

4

1 に答える 1

1

これの一般的な理由のいくつかは次のとおりです。

  1. サービスは、サービス プロトコルが完了し、プロセスがサービスとして実行されなくなったという意味で「停止」する場合がありますが、プロセスはまだ実行されており、終了していません。Serviced stopped != プロセスが終了しました。したがって、これはタイミングの問題であり、多くの処理が行われている場合、プロセスが終了して Dll が解放されるまでに時間がかかる場合があります。プロセスがシャットダウンするのに時間がかかるかどうかは誰も気にしないため、サービスを手動でシャットダウンした場合は発生しません。インストール/アンインストールは、プロセスのシャットダウンと、使用中の Dll を削除しようとする Windows との間の競合です。サービスが何らかの形で誤動作している可能性がありますが、それを排除することはできません。

  2. 何かがサービスまたはプロセスに対して開いているハンドルを持っています。あなたの場合はそうではないようですが、システム上またはインストール (カスタム アクションなど) にサービス ハンドルまたはプロセス ハンドルを開いたアプリがある場合、それらを完全に終了することはできません。

于 2015-03-27T18:01:13.660 に答える