Wix Toolset构建报错:无法找到[INSTALLFOLDER]下的服务exe文件
问题根源
你核心的用法误区是直接把INSTALLFOLDER拼接文件名作为ServiceInstall的ExePath。Wix在构建阶段会校验这个路径下的文件是否存在,但INSTALLFOLDER是安装时才会创建的目录,服务exe此时还只是待打包的源文件,根本不在这个路径下,所以必然报错找不到文件。
正确实现方式
Wix要求ServiceInstall的ExePath必须指向安装包中已定义的File元素,按以下步骤调整:
先定义包含服务exe的组件
用项目编译输出目录的变量(比如$(var.FileDeletionRecordService.TargetDir))指定服务exe的源路径,把文件纳入安装包:<DirectoryRef Id="INSTALLFOLDER"> <Component Id="ServiceComponent" Guid="*"> <File Id="ServiceExeFile" Source="$(var.FileDeletionRecordService.TargetDir)FileDeletionRecordService.exe" KeyPath="yes" /> <!-- 后续在这里添加ServiceInstall和ServiceControl --> </Component> </DirectoryRef>用文件引用语法指定ServiceInstall的ExePath
不要硬写[INSTALLFOLDER]\FileDeletionRecordService.exe,改用Wix的[#FileId]语法,它会自动解析为文件安装后的完整路径:<ServiceInstall Id="InstallMyService" Name="FileDeletionRecordService" DisplayName="文件删除记录服务" Type="ownProcess" Start="auto" ErrorControl="normal" ExePath="[#ServiceExeFile]" /> <ServiceControl Id="ManageService" Name="FileDeletionRecordService" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
额外提示
- 完全不需要手动预先创建目录或放置文件,Wix构建时会从你指定的Source路径读取服务exe,打包进安装包,安装时自动创建INSTALLFOLDER并完成文件复制。
- 确认项目引用正确,
$(var.你的服务项目名.TargetDir)变量要能准确指向服务exe的编译输出目录,这样Wix才能找到源文件。
内容的提问来源于stack exchange,提问作者Circle Hsiao
相关产品推荐
相关产品推荐

