在Windows启动时运行Java应用程序

时间:2011-05-10 16:52:48

标签: java windows startup

我有一个包含Java应用程序的JAR文件。如何在不需要用户交互的情况下从Windows开始?

8 个答案:

答案 0 :(得分:36)

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

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

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

  

还有一件事:使用 java javaw 之间存在差异。虽然 java 在调试应用程序时更好,但应用程序会打印文本或类似内容, javaw 在您不需要时更好。为什么?因为 java 使用控制台运行java程序,该控制台显示所有应用程序打印(println,异常堆栈跟踪等),而 javaw 不在控制台上运行。

答案 1 :(得分:17)

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

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服务

如果你超时使用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

使用上面的命令

创建一个带名称和路径的字符串

答案 2 :(得分:13)

this question的答案可能符合您的需求。设置你的java应用程序作为Windows服务运行,你应该很高兴。

答案 3 :(得分:7)

哈哈...容易! 从run(你可以按start + r)写regedit 然后: HKey本地机器 - &gt;软件 - &gt; microsoft-&gt; windows-&gt;当前版本 - &gt;跑 单击它,在另一个面板中右键单击任何内容并选择 添加 - &gt;字符串值 将它命名为java 双击它并将其值设为如下: 'javaw -Xmx200m -jar C:\ Path \ to \ jarfile \ TheJar.jar' 希望我能帮到你^ _ ^

答案 4 :(得分:6)

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

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

当你实现了使用注册表的函数而不是你需要的只是运行这段代码

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [user_id] => 0
            [archived] => 0
            [supplier_id] => 5
            [customer_id] => 1
            [contact] => dfgfdg
            [commission] => dfgdfg
            [entrance_date] => 2015-09-22 16:52:33
            [cost_estimate] => 1
            [status] => 1
            [type] => 1
            [watch_id] => 7
            [reference] => dfgdfg
            [serial_number] => 0
            [delivery_date] => 2015-09-07 16:52:33
            [articles_json] => 
            [total_sales_cost_netto] => 
            [gross_profit_netto] => 
            [gross_profit_brutto] => 
            [created_at] => 2015-09-09 20:10:02
            [updated_at] => 2015-09-11 16:52:33
        )

)

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

将其从自动运行中删除,只需

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);

<强>更新

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

答案 5 :(得分:2)

要从任何可执行文件创建服务,请使用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包装器将执行的操作:

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 :(得分:0)

如果您尚未准备好自己进行配置,或者您希望在多台计算机上使用相同的功能,则可以使用Advanced Installer。您可以打包安装在Windows上的jar并设置将在启动时运行程序的params

答案 7 :(得分:-1)

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

要求安装.NET运行时。