Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中以编程方式向Windows Startup添加/删除Java桌面应用程序?_Java_Windows_Java Native Interface_Startup - Fatal编程技术网

如何在Java中以编程方式向Windows Startup添加/删除Java桌面应用程序?

如何在Java中以编程方式向Windows Startup添加/删除Java桌面应用程序?,java,windows,java-native-interface,startup,Java,Windows,Java Native Interface,Startup,我有一个用Java编写的windows桌面应用程序。我有一个复选框,上面写着“系统启动时启动”。因此,如果选中此复选框,则我希望在用户登录Windows时启动应用程序。如果它没有被选中,那么我想删除它(如果它已经存在) 我想用Java在我的应用程序中实现这一点(我知道还有其他一些方法,比如批处理文件和windows服务) 我检查了代码,但它不起作用。事实上,我只是想要一个像这样的解决方案 但不幸的是,它在C#net中。那么如何使用Java实现这一点呢 编辑:我也对JNA/JNI方法持开放态度。问

我有一个用Java编写的windows桌面应用程序。我有一个复选框,上面写着“系统启动时启动”。因此,如果选中此复选框,则我希望在用户登录Windows时启动应用程序。如果它没有被选中,那么我想删除它(如果它已经存在)

我想用Java在我的应用程序中实现这一点(我知道还有其他一些方法,比如批处理文件和windows服务)

我检查了代码,但它不起作用。事实上,我只是想要一个像这样的解决方案

但不幸的是,它在C#net中。那么如何使用Java实现这一点呢


编辑:我也对JNA/JNI方法持开放态度。问题是我只需要用Java来做。不管我用什么都没关系。我已准备好使用JNA/JNI。

另一个比COM解决方案更简单的选项是在Windows启动文件夹中添加/删除文件。你可以这样做:

    String allUsersStartupFolder = "C:/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup";
    //String personalStartupFolder = "C:/Users/" + System.getProperty("user.name") + "/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup";

    File startupFolder = new File(allUsersStartupFolder);
    System.out.println(startupFolder);
    File startupFile = new File(startupFolder, "MyProgramStartup.bat");

    if(startupFile.exists()){
        System.out.println("Unregister");
        startupFile.delete();
    }else{
        System.out.println("Register");
        Files.write(startupFile.toPath(), "java -jar MyProgram.jar".getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
    }

这实际上有些困难,因为创建快捷方式实际上是通过COM完成的,是的。如果知道存在“startup”菜单,或者通过注册表删除,那么可以相对轻松地删除简短的内容,同样,如果没有一些JNA/JNI支持,也不能从Java内部执行这项操作。就我个人而言,我利用了,但它们是商业性的products@MadProgrammer:谢谢你的信息。我也对JNA/JNI方法持开放态度。问题是我只需要用Java来做。不管我用什么都没关系。我已经准备好去JNA/JNI了。你能告诉我一些路径吗?好的,你可以从开始,这将允许你写入“启动”注册表项,这可能是一个简单的方法来完成这项工作(因为它更容易找到启动菜单),你必须在最新的JNA版本中验证它的支持,但您可能可以使用类似的方法来创建shortcut@MadProgrammer:谢谢你的链接。我一定会尝试一下。将在此处更新结果。