我正在创建一个wix安装程序,我需要能够在自定义操作中复制此批处理文件的行为:
start /d "C:\Program Files (x86)\Remindex" INSTSRV.EXE RemindexNP
"C:\Program Files (x86)\Remindex\SRVANY.EXE"
我正在尝试使用普通的Windows应用程序创建服务,SRVANY.EXE可以这样做。这个批处理文件运行正常,但我似乎无法通过自定义操作来执行相同的操作。我试过这个:
<CustomAction Id="RunNP" FileKey="FILE_INSTALLFOLDER_INSTSRVEXE"
ExeCommand="RemindexNP [INSTALLFOLDER]SRVANY.EXE" Execute="commit" Return="ignore"/>
此自定义操作不会导致我在日志文件中看到任何错误,但我认为instsrv.exe不接受我在ExeCommand中传递的参数。我知道instsrv.exe和srvany.exe存在,因为我在InstallFinalize之前运行自定义操作。
有人知道我的自定义操作有什么问题吗?
我不希望在我的安装文件夹中包含实际的批处理文件,因为除了在安装上运行之外它没有理由在那里。我试过在安装程序中包含一个,但我不知道如何引用安装目录。当我使用%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.
任何建议都将不胜感激。
答案 0 :(得分:2)
这是一个技巧问题,因为您不需要自定义操作。 srvany.exe充当服务主机,因此可以使用Directory,Component,File,ServiceInstall和(如果需要)ServiceControl元素创作到安装程序中。