问题标签 [procrun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
493 浏览

java - 具有外部属性文件的 prunsrv 服务

我有一个使用 NetBeans 创建的 java .jar 文件。我正在使用 apaches procrun (prunsrv.exe) 将该 .jar 安装为 Windows 服务。我修改了代码以从 config.properties 文件中获取属性。我将 config.properties 文件添加到我的 .jar 文件所在的同一文件夹中。我的代码如下:

在我的代码的最后一行,当我尝试启动我的服务时,我得到了一个 NPE。我认为这是因为找不到该文件。我修改了 manifest.mf 如下:

我还尝试将 config.properties 复制到“lib”文件夹(我的 .jar 文件所在的子文件夹)。结果相同。

我修改了安装服务的批处理文件中的“set PR_CLASSPATH”行,如下所示:

仍然是相同的 NPE。

安装服务后,如何让我的代码识别我的 config.properties 文件?

谢谢,雷蒙德

0 投票
1 回答
346 浏览

java - Prunsrv exe 通过任务管理器杀死,但子进程仍然存在

我有一个使用 procrun(特别是 prunsrv)作为 Windows 服务运行的 Java 应用程序。该服务定义为 exe StartMode,因此批处理文件 (run-my-app.bat) 作为 StartImage 运行。为什么我不使用 jvm 或 java 模式是另一回事,与这个问题无关(我无法使用 procrun 运行 spring boot 应用程序,所有示例都不起作用,所以我求助于创建一个批处理文件并调用 java -jar my 。罐)。prunsrv.exe 实际上是根据应用程序重命名的,比如 myapp.exe。问题是如果 myapp.exe 通过任务管理器被杀死,java 进程仍然存在!批处理文件 run-my-app.bat 使用以下行运行应用程序:

批处理文件完成并且启动的 Java 进程仍然存在 - 我知道这一点,因为如果我在上述“启动”命令之后打印一条消息,我会在日志中看到该消息。

当 prunsrv.exe(重命名为 myapp.exe)被杀死时,有什么方法可以停止 java 进程?

0 投票
0 回答
79 浏览

java - 如何通过 Procrun 使用静态方法进行服务控制

我正在使用 Apache SSHD 编写 SFTP 服务。该服务器将使用 Apache commons daemon procrun 安装在 Windows 上。我想使用类似于 Tomcat 的静态方法 start() 和 stop() 来处理服务启动/停止。但是我不明白这是如何工作的。我认为我的困惑来自于理解 procrun 如何启动和停止服务。据我了解,procrun 使用 args“start”/“stop”启动了一个新的 java 进程?Java 程序的新实例如何处理已经在运行的程序的控制?

0 投票
0 回答
130 浏览

java - 如何将jar文件添加到procun中的服务?

我使用 Java 作为 Windows 服务。我使用了 procrun 方法。通常我的服务正在工作。我有 API,我想在我的 Java 代码中使用这个 API,当服务工作时,我的 API 应该可以工作。

我在我的 Java 项目中添加了 .jar 文件,然后出现如下错误:

通常我在这样的目录中的所有文件:

我手动将所有 .jar 文件放入此目录(以及 bin)中,它再次不起作用。

在终端中我使用了这个命令:

如果有人帮助我,我会很高兴。

此致

0 投票
2 回答
520 浏览

windows - Solr Cloud 作为 Windows 服务

我正在尝试使用Procrun将 Solr Cloud 作为 Windows 服务启动,但我找不到可行的解决方案。也许有一些解决方案如何做到这一点?

我尝试使用这篇文章设置 Solr Cloud - https://opensourceconnections.com/blog/2013/08/27/solrcloud-as-a-windows-service/但它不起作用。

0 投票
1 回答
3243 浏览

java - Procrun 记录“缺少服务 ImageFile”(错误代码 1)

我尝试使用 Apache Commons Procrun 将 JAR 文件安装为 Windows 服务。该服务已安装,但执行它会给我以下错误:

我的配置看起来像(它在一个批处理文件中):

SO上有类似的问题,但我找不到“缺少服务ImageFile”错误的任何答案(也没有关于这个主题的官方文档)。虽然我认为自己在编码方面有些经验,但我不知道这个错误来自哪里。任何帮助,将不胜感激。

0 投票
1 回答
43 浏览

java - Java 作为 Windows 服务 - 用户数据路径

我正在使用 Apache Procrun 在 Windows 10 上将 java 程序安装为服务。安装该服务没问题,它主要按预期工作,但是,用户数据未存储在 %appdata% 下的相应用户数据目录中。Win10 似乎将其重定向到虚拟目录,但我无法找到它。它必须位于 System32 或 SysWOW64 下的 windows 目录中的某个位置。你能给我一个提示,在哪里看?

0 投票
1 回答
1836 浏览

java - 使用 procrun 将 java jar 作为 Windows 服务运行

我制作了一个客户端服务器程序,可以将文件从我的 android 设备发送到我的 windows 7,服务器端程序 (windows) 侦听循环并对套接​​字的接收做出反应。

所以我将我的 java 程序导出到 jar 文件并执行以下命令(以管理员身份打开 cmd 后)以使其成为服务:

该服务已正确创建和执行。

这是 procrun.log 文件显示的内容:

stdout.log 文件:

什么对应于应该在开始时显示我的程序,这里是我们感兴趣的 java 程序部分:

总而言之,当我在 eclipse 或 jar 上运行我的 java 程序时,它运行完全并正确接收文件,而我的服务仅执行开始,它不接收套接字。

预先感谢您的帮助

0 投票
1 回答
243 浏览

java - 使用 procrun 在作为服务运行的 java 应用程序上启用 jmx 身份验证

我正在使用 procrun 将 java 应用程序作为服务运行。未启用 JMX 身份验证时,应用程序运行良好,但是当我添加访问和密码文件、限制密码文件的权限并启用 JMX 身份验证时,应用程序无法启动并1074: The process terminated unexpectedly出现错误。

下面是我使用最新版本的 procrun 将应用程序注册为服务的脚本。

关于什么可能是错误的任何线索?

0 投票
1 回答
132 浏览

java - java Windows 服务如何“知道”它已完成初始化?

TL;DR:我有一个用 Java 编写的 Windows 服务,经过 jarred 处理,并与 Procrun 一起安装。我从W32Service.startService(). 该服务何时告诉 Windows 它已启动?


我正在使用用 Java 编写的 Windows 服务。我一直在使用Procrun来安装它们,并使用 JNA 来使用它们(特别是com.sun.jna.platform.win32.W32Service)。

我想了解对象方法的确切行为(这是我的 Y 的 X:了解的确切行为)。W32ServicewaitForNonPendingState()startService()

waitForNonPendingState()实际上非常简单:它会轮询服务的状态,直到它处于非挂起状态或发生超时。不过,服务如何转换到非挂起状态并不是那么简单。

微软的服务状态转换页面说:

服务的初始状态是 SERVICE_STOPPED。当 SCM 启动服务时,它将服务状态设置为 SERVICE_START_PENDING 并调用服务的ServiceMain函数。然后,该服务使用Service ServiceMain Function中描述的技术之一完成其初始化。服务完成初始化并准备开始接收控制请求后,服务调用SetServiceStatus报告 SERVICE_RUNNING...

但这并没有真正说明服务如何做到这一点。ServiceMain备注也只是说“服务控制管理器 (SCM) 等待服务报告 SERVICE_RUNNING 状态。 ”;这几乎和我能找到的一样具体。

这让我想到了我的问题:java Windows 服务如何“知道”它已完成初始化?

换句话说,如果我有一个使用main()方法安装的服务:

我打电话给:

我在什么时候SampleService告诉 Windows 它已经初始化?通过实验,我可以看到,如果在构建过程中出现运行时异常,则服务的状态永远不会是SERVICE_RUNNING,因此该进程中有一些东西设置了该状态。但是我的一些构造函数等待队列或进入自旋循环,他们确实设置了 SERVICE_RUNNING 状态,所以我不知道这个状态是在哪里设置的。W32Service 的文档在这方面并没有什么用处。