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