【问题标题】:Run Java application at Windows startup在 Windows 启动时运行 Java 应用程序
【发布时间】:2011-08-22 15:36:25
【问题描述】:

我有一个包含 Java 应用程序的 JAR 文件。如何让它从 Windows 启动,而不需要用户交互?

【问题讨论】:

标签: java windows startup


【解决方案1】:
  1. 打开“运行”(Windows-Key+R)
  2. 写信regedit
  3. 转到HKey local machine -> Software -> Microsoft -> Windows -> Current version -> run
  4. 单击它并在另一个面板中右键单击任何内容并选择 Add -> String value
  5. 将其命名为java
  6. 双击它并把它的值如下: javaw -Xmx200m -jar C:\Path\to\jarfile\TheJar.jar

【讨论】:

  • 开头和结尾都需要撇号吗?或报价?还是什么都没有?
  • 否 - 如果目录没有空格,您可以将其留空
  • 只是我在考虑你答案中的初始撇号,我的意思是:--> 'javaw...
  • 在此之后有什么方法可以查看标准日志吗?在 Linux 中的 systemd 单元中,您总是可以尝试通过运行 journalctl 查看日志,那么这种方法有什么替代方法吗?
【解决方案2】:

如果您想通过 Java 以编程方式执行此操作,您可以直接写入 Windows 注册表启动文件夹。

Here 是如何以编程方式写入 Windows 注册表的链接。

当您实现了使用注册表的功能时,您只需运行此代码即可

String value = "\"javaw -jar " + System.getProperty("user.dir") + "\\myJar.jar\"";
WinRegistry.writeStringValue(WinRegistry.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "myJar autorun key", value);

key 的值需要是运行应用程序的命令,例如 java -jar myJar.jar

要从自动运行中删除它,您只需

WinRegistry.deleteValue(WinRegistry.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "myJar autorun key");

更新

Replace WinRegistry.writeStringValue with WinRegistry.setStringValue recent version of java 1.8.x

【讨论】:

    【解决方案3】:

    这很简单,你必须把快捷方式放在

    Windows 7 C:\users\All Users\Start Menu\Programs\Startup(管理员)或User home directory(%userProfile%)

    Windows 10: 运行中shell:startup

    在它的属性->快捷方式->目标->java.exe -jar D:\..\runJar.jar

    注意:这只会在您登录后运行


    拥有管理员权限

    sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"会创建windows服务

    如果你得到 timeout 使用cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war 但即使这样你也会得到超时但在后台 java.exe 将被启动。签入任务管理器


    在一些受限的环境中,就像我在公司环境中一样

    错误:

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

    在这种情况下

    cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war

    如果您手动运行但会在后台运行,则会出现错误。

    注意:这将在 Windows 登录启动时运行(登录前,基于服务 'Startup Type')

    Detailed explanation of creating windows service


    注册编辑

    注意:仅限编辑高级用户

    只为当前用户运行

    HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/WINDOWS/CURRENT_VERSION/RUN
    

    为所有用户运行

    hkey_local_machine/SOFTWARE/MICROSOFT/WINDOWS/CURRENT_VERSION/RUN
    

    使用上面的命令创建一个带有名称和路径的字符串

    【讨论】:

    【解决方案4】:

    如果您还没有准备好自己进行配置,或者如果您想在多台计算机上使用相同的功能,那么您可以使用Advanced Installer。您可以打包要在 Windows 上安装的 jar,并设置将在启动时运行您的程序的参数

    【讨论】:

      【解决方案5】:

      为了从任何可执行文件创建服务,请使用Windows Resource Kits 2003 中的srvany.exe(注意= 后面的空格)::

      cmd> sc create NAME binPath= "c:\Program Files\Windows Resource Kits\Tools\srvany.exe" ^
         type= own start= auto error= normal DisplayName= "NAME for services.msc"
      

      然后传递srvany.exe wrapper 会做什么:

      cmd> reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NAME\Parameters" ^
           /v "Application" ^
           /d "\"c:\Program Files\Java\jre7\bin\java.exe\" -cp c:\home\devel\service Main"
      

      您在上面看到了空格的引用语法。下次启动服务:

      cmd> sc start NAME
      

      如果您出错,请重新检查您的设置:

      cmd> reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NAME" /s
      

      并删除服务:

      cmd> sc delete NAME
      

      然后再做一步。

      访问 GUI services.msc 并检查 procexp.exe 服务实际启动。

      另见:creating a service with sc.exe; how to pass in context parameters

      注意所有涉及的工具都是微软官方!!!

      【讨论】:

        【解决方案6】:

        使用“winsw” - http://kenai.com/projects/winsw - 它是为 Glassfish v3 编写的,但通常适用于 Java 程序。

        需要安装 .NET 运行时。

        【讨论】:

          【解决方案7】:

          创建一个 .bat 文件并将其放入:

          javaw -Xmx200m -jar C:\Path\to\jarfile\TheJar.jar

          然后将.bat文件放入windows启动文件夹中。

          还有一点:使用 javajavaw 是有区别的。当您调试应用程序时,java 会更好,应用程序会打印文本或类似的东西,而当您不需要时,javaw 会更好。为什么?因为 java 使用显示所有应用程序打印(println、异常堆栈跟踪等)的控制台运行 java 程序,而 javaw 不在控制台上运行。

          【讨论】:

          • 除了将其保存在启动文件夹中之外的任何其他方式
          • @ThorbjørnRavnAndersen 否则什么时候会发生?
          • @TheDDestroyer12 服务在启动时运行(如果这样配置)。
          • @ThorbjørnRavnAndersen 啊,对不起。
          【解决方案8】:

          this question 的答案可能适合您的需求。将您的 java 应用程序设置为作为 Windows 服务运行,您应该一切顺利。

          【讨论】:

            猜你喜欢
            • 2017-04-09
            • 1970-01-01
            • 2011-05-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-02
            • 1970-01-01
            相关资源
            最近更新 更多