WiX:在Windows XP上安装,自定义操作“成功”运行批处理脚本,但工作没有完成

时间:2012-07-25 15:19:12

标签: wix windows-installer windows-xp wix3.5

我已经使用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警告吗?使用运行安装程序的同一用户手动运行批处理,服务已注册。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这实际上在运行吗?尝试添加暂停命令,以便您可以看到它。我的经验表明,Windows Installer在启动自定义操作时使用CreateProcess而不是ShellExecute。这可以防止UAC提示,但也意味着它无法处理文件关联,并且必须启动exe进程而不是文件文件,例如.cmd文件。

答案 1 :(得分:0)

我已经弄清楚了。 我发现在Win XP中注册服务时,它是在Local System(或SYSTEM)用户下注册的。但SYSTEM用户没有设置APPDATA环境变量。发生的事情是,我的脚本会尝试启动服务,并且会因为没有定义APPDATA而无声地失败。

我声明/定义了一个自定义的MYAPPDATA系统级环境变量,现在当安装程序完成时 - 重启后 - 服务已启动并运行。

希望这有助于其他人依赖标准环境变量。