java - 如何通过 NSIS 脚本使 prunsvr 工作

标签 java windows-services nsis

我有一个 NSIS 脚本,负责创建安装程序。该安装程序复制我们的 java 应用程序的文件,然后使用 prunsvr 安装 Windows 服务。当我针对使用 J 的 launch 构建的 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 指定的启动和停止方法。

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

我的事件查看器仅显示:

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

最佳答案

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

也许您可以先尝试使用那里提供的示例服务。

关于java - 如何通过 NSIS 脚本使 prunsvr 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982149/

相关文章:

windows - 在 Windows 中将批处理文件放在哪里,以便在不更改 PATH 的情况下始终可以访问它?

java - 将 log4j 2.10.0 与 Java 9 System.Logger 一起使用

java - Flink 将 csv 文件映射到元组中

java - 获取 Math.random 的范围在 50–5000 之间

c# - 无法安装windows服务

windows-installer - NSIS 可以用来打包 MSI 安装程序吗?

java - 从 hibernate 中获取查询的执行时间

c# - 设置并发作业的最大值 Quartz.Net

c# - 从服务中获取当前的 UserProfile 路径

installation - NSIS - 仅在安装完成时运行程序