如何使用NSIS脚本制作prunsvr

时间:2014-09-22 19:54:53

标签: java windows-services nsis

我有一个NSIS脚本负责创建安装程序。此安装程序为我们的Java应用程序复制文件,然后使用prunsvr安装Windows服务。当我运行这个目标是使用launch for J构建的EXE文件时,一切正常。我希望能够在我的应用程序中响应WSM消息以执行一些清理/日志记录。我的NSIS脚本创建了这样的服务:

ExecWait '"$INSTDIR\prunsrv.exe" "//IS//${Project}" --DisplayName="IPTI ${Project}" --Install="$INSTDIR\prunsrv.exe" --Classpath="$INSTDIR\Host Interface.jar" --StartMode="java" --StartClass="com.ipti.ptl.hostinterfaceservice.HostInterfaceService" --StopMode="java" --StopClass="com.ipti.ptl.hostinterfaceservice.HostInterfaceservice" --Startup="auto" --StartPath="$INSTDIR"'
ExecWait 'net start "IPTI ${Project}"'

上述方法无法创建实际运行的服务,但此方法正常(以EXE为目标)

ExecWait '"$INSTDIR\prunsrv.exe" "//IS//${Project}" --DisplayName="IPTI ${Project}" --Install="$INSTDIR\prunsrv.exe" --StartMode=exe --StartImage="$INSTDIR\${Project}.exe" --Startup=auto --StartPath="$INSTDIR"'
ExecWait 'net start "IPTI ${Project}"'

我在主要方法中添加了以下内容,以便在不针对EXE时使用prunsvr:

public static void main(String[] args) throws Exception {
    Common.deployResources();
    if (args.length > 0 && args[0].equals("start")) {
        HostInterfaceService hi = new HostInterfaceService();
        hi.launch();
    }
    else {
        System.exit(0);
    }
}

我也尝试过使用--StartClass --StartMethod --StopClass和--StopMethod指定的start和stop方法。

无论我尝试什么,我总会得到一个错误。当我尝试从服务管理器启动时,我得到错误代码1或4.根本没有其他信息。我做错了什么?

我的活动查看器仅显示:

The IPTI Host Interface service terminated with service-specific error Incorrect Function.

1 个答案:

答案 0 :(得分:1)

根据此Blog-Entry,您必须将prunsrv.exe重命名为您的服务名称。

也许您可以先使用那里提供的样品服务进行尝试。