我已经使用WiX创建了一个MSI安装程序。 我专门针对Windows XP SP3 + 它在完成安装时运行自定义操作,以通过NSSM.exe将应用程序注册为服务 从命令行运行时,批处理文件执行它所写的操作,但是当作为安装程序的一部分运行时,它完成安装我看到命令提示符打开并且脚本运行,但是应用程序未注册。
<CustomAction Id="installLoft"
Directory="ModulesFolder"
ExeCommand="[ModulesFolder]winInstall.cmd"
Execute="deferred"
Return="check"
HideTarget="no"
Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="installLoft" Before="InstallFinalize"><![CDATA[ (NOT Installed) AND (NOT REMOVE) ]]></Custom>
</InstallExecuteSequence>
批处理脚本内容为:
@ECHO OFF
SET PATH=%PATH%;%APPDATA%\app1\
IF "%ProgramFiles(x86)%"=="" (
set PATH=%PATH%;%ProgramFiles%\app1\
) ELSE (
set PATH=%PATH%;%ProgramFiles(x86)%\app1\
)
"app1\modules\bin\nssm.exe" install my_service_name_app1 app1.cmd -g
因此,app1是一个需要作为服务运行的脚本,因此需要NSSM.exe 所有组件/文件都安装在正确的位置。
我缺少一些Win XP警告吗?使用运行安装程序的同一用户手动运行批处理,服务已注册。
感谢您的帮助。
答案 0 :(得分:0)
这实际上在运行吗?尝试添加暂停命令,以便您可以看到它。我的经验表明,Windows Installer在启动自定义操作时使用CreateProcess而不是ShellExecute。这可以防止UAC提示,但也意味着它无法处理文件关联,并且必须启动exe进程而不是文件文件,例如.cmd文件。
答案 1 :(得分:0)
我已经弄清楚了。 我发现在Win XP中注册服务时,它是在Local System(或SYSTEM)用户下注册的。但SYSTEM用户没有设置APPDATA环境变量。发生的事情是,我的脚本会尝试启动服务,并且会因为没有定义APPDATA而无声地失败。
我声明/定义了一个自定义的MYAPPDATA系统级环境变量,现在当安装程序完成时 - 重启后 - 服务已启动并运行。
希望这有助于其他人依赖标准环境变量。