0

仕事で wix インストーラーを作成していますが、カスタム アクションでこのバッチ ファイルの動作を再現できるようにする必要があります。

start /d "C:\Program Files (x86)\Remindex" INSTSRV.EXE RemindexNP 
"C:\Program Files (x86)\Remindex\SRVANY.EXE"

SRVANY.EXE で実行できる通常の Windows アプリケーションを使用してサービスを作成しようとしています。このバッチ ファイルは正常に実行されますが、カスタム アクションで同じことを実行できないようです。私はこれを試しました:

<CustomAction Id="RunNP" FileKey="FILE_INSTALLFOLDER_INSTSRVEXE" 
              ExeCommand="RemindexNP [INSTALLFOLDER]SRVANY.EXE" Execute="commit" Return="ignore"/>

このカスタム アクションによって、ログ ファイルに表示されるエラーは発生しませんが、ExeCommand で渡したパラメーターを instsrv.exe が受け入れているとは思えません。InstallFinalize の前にカスタム アクションを実行しているので、instsrv.exe と srvany.exe が存在することはわかっています。

私のカスタムアクションの何が問題なのか知っている人はいますか?

インストール時に実行される以外にそこにある理由がないため、インストールフォルダーに実際のバッチファイルを含めないことをお勧めします。インストーラーに含めようとしましたが、インストール ディレクトリを参照する方法がわかりません。%cd% を使用すると、何らかの理由でシステム フォルダーを参照するだけです。

ServiceInstall 要素と ServiceControl 要素を使用してみましたが、インストーラーが「サービスの開始」でスタックします。ここに私のコンポーネントがあります:

<Component Id="CMP_RemindexNP.exe" Guid="{3FB99890-752D-4652-9412-72230695A520}">
    <File Id="FILE_INSTALLFOLDER_RemindexNPEXE" Source="RemindexNP.exe" KeyPath="yes"/>
        <RegistryKey Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\RemindexNP\Parameters">
          <RegistryValue Id="rg_remNP1" Action="write" Name="AppDirectory" Value="[INSTALLFOLDER]" Type="string"/>
          <RegistryValue Id="rg_remNP2" Action="write" Name="Application" Value="[INSTALLFOLDER]RemindexNP.exe" Type="string"/>
        </RegistryKey>
        <ServiceInstall DisplayName="RemindexNP" Id="srv_remNP" Name="RemindexNP" Start="auto" Type="shareProcess" ErrorControl="ignore"/>
        <ServiceControl Id="srvc_remNP" Name="RemindexNP" Remove="both" Start="install" Stop="uninstall" Wait="no"/>
      </Component>

そして私のログ:

Action 17:15:08: StartServices. Starting services
Action start 17:15:08: StartServices.
StartServices: Service: Starting services
Action ended 17:15:08: StartServices. Return value 1.

どんな提案でも大歓迎です。

4

1 に答える 1