0

状況

Windows フォームアプリケーションと Windows サービスで構成されたアプリケーションがあります。これらのコンポーネントをインストールするために、私は WiX を使用しています。今までは問題なく動作していましたが、Windows XP にインストールしようとすると問題が発生します。

インストールを終了する前にインストーラーがサービスを開始しようとすると、サービスが機能しません。「ユーザーには開始する権限がありません」というメッセージが表示されます。

ServiceControl.wxs ファイルからブロックを削除し、再度ビルドして、PC のインストールと再起動を試みました (これは Windows XP の場合です)。これで、私のサービスは正常に開始されます。

問題

Windows が XP で Service Pack が 3 未満の場合のみ、<ServiceControl>からの再起動と無効化について質問する必要があります。<Component>

だから私はこれを試しました:

<Product>
  <!-- (...) -->
  <InstallExecuteSequence>
    <ScheduleReboot After="InstallFinalize">
      <![CDATA[NOT (VersionNT <= 501 AND ServicePackLevel <> 3)]]>
    </ScheduleReboot>
  </InstallExecuteSequence>
  <!-- (...) -->
</Product>
<!-- (...) -->
<Fragment>
  <ComponentGroup>
    <Component>
      <File Id="ServExe" Name="Serv.exe" DiskId="1"
            Source="Serv.exe" KeyPath="yes"/>
      <ServiceInstall
        Id="ServiceInstaller"
        Type="ownProcess"
        Name="Serv"
        DisplayName="Serv"
        Description="Serv"
        Start="auto"
        Account="[SERVICEACCOUNT]"
        Password="[SERVICEPASSWORD]"
        ErrorControl="normal" />
      <ServiceControl Id="StartService" Start="install" Stop="both"
                      Remove="uninstall" Name="Serv" Wait="yes" />
    </Component>
    <!-- (...) -->
  </ComponentGroup>
</Fragment>

しかし、Windows(XP、XP SP 2、XP SP 3、Windows 7を試しました)に関係なく、常に「再起動が必要」ダイアログが表示されます。また、インストール時の条件を に入れる方法がわかりません<ServiceControl>

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

InstallExecuteSequence テーブルでは、Condition が True の場合にのみアクションが実行されます。次のように式を単純化してみてください: (VersionNT = 501 AND ServicePackLevel = 3)。Orca で msi ファイルを開き、InstallExecuteSequence テーブルの ScheduleReboot 行に正しい条件レコードが含まれているかどうかを確認できます。インストールのログ ファイルを作成し、インストーラがどのように条件を評価したかを確認してみてください。

于 2013-09-21T18:29:36.533 に答える