java - 创建 Java 应用程序以作为 Windows 服务运行

标签 java service windows-services

我想创建一个运行我的 Java 应用程序的 Windows 服务。

这通过使用没问题

sc.exe create myService binPath= "java -jar C:\to\my\service.jar"

当我尝试启动我创建的服务时,我得到了这个响应:

Error 1053: The service did not respond to the start or control request in a timely fashion

不幸的是,我的程序似乎没有响应它正在运行的 Windows 服务。

我如何与我的程序运行的 Windows 服务通信?

我试过了 NSSM效果很好。但我不想使用其他第三方应用程序。 当我搜索答案时,我总是看到大多数人使用 Java Service Wrapper .

如何构造我的 Java 代码以接受来自 Windows 服务的消息?

这是我想作为服务运行的时间打印程序的一个简单示例。我必须做什么?

package tst;

import java.util.Date;

public class Tester
{

    public static void main(String[] args)
    {
        Thread thread = new Thread()
        {

            public void run()
            {
                long start = System.currentTimeMillis();
                long end = start + 20 * 1000;

                while (System.currentTimeMillis() < end)
                {
                    Date date = new Date();
                    System.out.println("Time: " + date.toString());

                    try
                    {
                        Thread.sleep(5000);
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }

            }
        };
        thread.start();
    }
}

最佳答案

除非您的应用程序实现了与 Windows Service Control Manager (SCM) 交互所需的接口(interface),您将无法启动、停止或操作您的应用程序即服务。您唯一的选择是使用服务包装器,例如 NSSM、JSW 或什至是 Microsoft 的旧产品但仍然可用 Srvany utility .

关于java - 创建 Java 应用程序以作为 Windows 服务运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41058215/

相关文章:

java - 检查和删除数据库中的 2 个值时 Hibernate JPA 出错

mysql - 将 MYSQL 添加到 Cloud Foundry 并将其用作服务

带有 locationListener 回调的 Android 服务

c# - 如何获取 Windows 服务打开的端口?

windows - Tomcat 9 需要 1 分钟才能停止

java - 如何使用 Spring JMS 发布 JMS 主题?

java - true 算术正常工作, false 未显示正确的输出

java - 如何将 Idea 模块添加到 gradle 的依赖项中

service - 如果容器不监听端口,如何创建 kubernetes 部署?

asp.net - Window Service、WCF Service 应用程序和 ASP.NET Web 服务应用程序之间的区别?