我们在VisualStudio 2008中创建了一个轻量级(VC ++,无.Net)Windows服务,包括Visual Studio安装项目。
安装项目有三个自定义操作,sc.exe的简单调用(在“提交”部分中创建和启动,在“卸载”部分中删除)。这在几台不同的Win7机器上运行良好,但在XP机器上失败(在Virtual PC“Windows XP模式”上也失败),msiexec详细日志显示错误1721:“此Windows Installer程序包有问题。无法运行此安装所需的操作。请联系您的支持人员或软件包供应商。“
删除自定义操作时,安装完成后WinXP计算机上没有问题。通过在安装完成后从命令行调用sc.exe来创建和启动服务(由具有相同权限的同一用户完成)也可以。 Orca将自定义操作的类型显示为“提交”部分中的操作3586,以及“卸载”部分中操作的3074。
研究:
几个堆栈溢出答案和其他站点表明原因缺少特权(同样,当在Win7上安装时,出现UAC对话框)并建议使用“Runas”,但该服务将安装在我们不知道哪些用户的机器上哪些权限存在且How do you run CMD.exe under the Local System Account?表明使用系统帐户可能在一个简单的自定义操作中无法实现。
大多数其他问题/答案都与WiX有关,这会增加开销,我们希望在这样小的项目中防止这种情况。
安装程序和生成的服务应具有尽可能少的先决条件,安装应仅需要执行.msi文件。
或者我们是否误导了安装程序安装程序创建和启动服务的更好方法?