0

私は現在 msi に取り組んでおり、wix プロジェクトからサービスを開始する際にいくつかの問題に直面しています。サービスであるexeファイルをコピーし、サービスをインストールするためのxmlです。

    <Component Id='MatcherService' Guid='{81EC2888-DFA6-49BA-829A-5A8354D89310}' Directory='MATCHERDIR'>
          <File Id='MatchingServer.exe' Source='$(var.Matcher.TargetDir)\MatchingServer.exe'/>
          <ServiceInstall
             Id="ServiceInstaller1"
             Type="ownProcess"
             Name="Matcher1"
             DisplayName="Matching Service 1"
             Description="test"
             Start="auto"
             Account="NT AUTHORITY\NETWORK SERVICE"
             Interactive="no"
             ErrorControl="normal"
             Vital="yes">
            <util:PermissionEx
               User="Everyone"
               GenericAll="yes"
               ServiceChangeConfig="yes"
               ServiceEnumerateDependents="yes"
               ChangePermission="yes"
               ServiceInterrogate="yes"
               ServicePauseContinue="yes"
               ServiceQueryConfig="yes"
               ServiceQueryStatus="yes"
               ServiceStart="yes"
               ServiceStop="yes" />
          </ServiceInstall>
 <ServiceControl Id="StartService1" Stop="both" Remove="uninstall" Name="Matcher1" Wait="yes"/>
</Component>

これはサービスをインストールするだけで、サービスを開くと、このサービスを適切に開始できます。

直面している問題は、この MatchingServer.exe の複数のインスタンスをサービスとして実行することです。30 個のインスタンスが必要です。

私はこのようにしようとしました:

<Component Id='MatcherService' Guid='{81EC2888-DFA6-49BA-829A-5A8354D89310}' Directory='MATCHERDIR'>
      <File Id='MatchingServer.exe' Source='$(var.Matcher.TargetDir)\MatchingServer.exe'/>
      <ServiceInstall
         Id="ServiceInstaller1"
         Type="ownProcess"
         Name="Matcher1"
         DisplayName="Matching Service 1"
         Description="test"
         Start="auto"
         Account="NT AUTHORITY\NETWORK SERVICE"
         Interactive="no"
         ErrorControl="normal"
         Vital="yes">
        <util:PermissionEx
           User="Everyone"
           GenericAll="yes"
           ServiceChangeConfig="yes"
           ServiceEnumerateDependents="yes"
           ChangePermission="yes"
           ServiceInterrogate="yes"
           ServicePauseContinue="yes"
           ServiceQueryConfig="yes"
           ServiceQueryStatus="yes"
           ServiceStart="yes"
           ServiceStop="yes" />
      </ServiceInstall>

      <ServiceInstall
        Id="ServiceInstaller2"
        Type="ownProcess"
        Name="Matcher2"
        DisplayName="Matching Service 2"
        Description="test"
        Start="auto"
        Account="NT AUTHORITY\NETWORK SERVICE"
        Interactive="no"
        ErrorControl="normal"
        Vital="yes">
        <util:PermissionEx
           User="Everyone"
           GenericAll="yes"
           ServiceChangeConfig="yes"
           ServiceEnumerateDependents="yes"
           ChangePermission="yes"
           ServiceInterrogate="yes"
           ServicePauseContinue="yes"
           ServiceQueryConfig="yes"
           ServiceQueryStatus="yes"
           ServiceStart="yes"
           ServiceStop="yes" />
      </ServiceInstall>

      <ServiceControl Id="StartService1" Stop="both" Remove="uninstall" Name="Matcher1" Wait="yes"/>
      <ServiceControl Id="StartService2" Stop="both" Remove="uninstall" Name="Matcher2" Wait="yes"/>
    </Component>

これにより、明らかにコンパイルエラーが発生します。次のようなバッチファイルからこれを行うことに成功しました:

MatchingServer.exe -i 1 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 2 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 3 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 4 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 5 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 6 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 7 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 8 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 9 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 10 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 11 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 12 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 13 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 14 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 15 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 16 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 17 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 18 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 19 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 20 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 21 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 22 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 23 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 24 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 25 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 26 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 27 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 28 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 29 -l "NT AUTHORITY\NETWORKSERVICE"
MatchingServer.exe -i 30 -l "NT AUTHORITY\NETWORKSERVICE"

そして、このバッチ ファイルを実行するカスタム アクションを作成します。しかし、私はこれをwixの「内部」でやりたいと思っています。

バッチファイルを回避せずに、wix とは異なる名前で、同じ .exe ファイルの 30 個のサービスインスタンスを生成するにはどうすればよいですか?

4

1 に答える 1

1

Windows サービスは、これを行うようには設計されていません。同じサーバーのインスタンスが 30 個必要な場合は、ウィンドウ内に 30 個の固有のサービスを作成する必要があります。

ただし、各サービスがコピーである場合は、アプリ内で複数のスレッドを起動してこれを行うことをお勧めします。静的クラスがある場合は、アプリ ドメインで派手なフットワークを行う必要があるか、マスター exe (サービス) によって管理される 30 個の exe を生成する必要があります。

于 2013-05-22T08:57:10.773 に答える