Java 如何使prunsvr从NSIS脚本工作
我有一个NSIS脚本负责创建安装程序。此安装程序复制java应用程序的文件,然后使用prunsvr安装windows服务。当我针对一个使用launchforj构建的EXE文件运行这个程序时,一切都正常。我希望能够响应应用程序中的WSM消息以执行一些清理/日志记录。我的NSIS脚本创建如下服务:Java 如何使prunsvr从NSIS脚本工作,java,windows-services,nsis,Java,Windows Services,Nsis,我有一个NSIS脚本负责创建安装程序。此安装程序复制java应用程序的文件,然后使用prunsvr安装windows服务。当我针对一个使用launchforj构建的EXE文件运行这个程序时,一切都正常。我希望能够响应应用程序中的WSM消息以执行一些清理/日志记录。我的NSIS脚本创建如下服务: ExecWait '"$INSTDIR\prunsrv.exe" "//IS//${Project}" --DisplayName="IPTI ${Project}" --Install="$INSTDI
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)
我在我的主要方法中添加了以下内容,以便在不以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.
根据这一点,您必须将prunsrv.exe重命名为您的服务名称
也许您可以先使用这里提供的示例服务进行尝试。对不起,我本应该删除这个问题,但问题是--Install标志如何处理安装路径中的空格。在NSIS内部,这必然导致空间被截断后的一切。修复方法是从安装该服务的NSIS调用批处理脚本。prunsrv.exe的名称似乎不相关,但您必须将prunmgr.exe重命名为服务名称才能使其工作。
The IPTI Host Interface service terminated with service-specific error Incorrect Function.