Пробовал разные способы, например через реестр:
String REG_ADD_CMD = "cmd /c reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v \"AppName\" /d \"%PROGRAMFILES%\\AppPath\App.exe\" /t REG_SZ";
Runtime.getRuntime().exec(REG_ADD_CMD);
Работает только под Windows XP. В Windows 8 выдает ошибку доступа.
Есть ли рабочие способы по кнопке добавить и удалить себя из автозагрузки?
UPD: выкладываю функцию-решение, может кому пригодитьсяpublic void setStartup(boolean startup) {
if (System.getProperty("os.name").toLowerCase().indexOf("mac") >= 0) {
// автозапуск для Mac OS X
String plist_text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
plist_text += "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDsPropertyList-1.0.dtd\">\n";
plist_text += "<plist version=\"1.0\">\n";
plist_text += " <dict>\n";
plist_text += " <key>Label</key>\n";
plist_text += " <string>ru.sp.MySquperApp</string>\n";
plist_text += " <key>ProgramArguments</key>\n";
plist_text += " <array>\n";
plist_text += " <string>/usr/bin/open</string>\n";
plist_text += " <string>/Applications/ChatMySquperApp</string>\n";
plist_text += " </array>\n";
plist_text += " <key>RunAtLoad</key>\n";
plist_text += " <true/>\n";
plist_text += " </dict>\n";
plist_text += "</plist>";
File plist = new File(System.getProperty("user.home")
+ "/Library/LaunchAgents/ru.sp.MySquperApp.plist");
if (startup) {
FileWriter writeFile = null;
try {
writeFile = new FileWriter(plist);
writeFile.write(plist_text);
} catch (IOException e) {
log.fatal(e);
} finally {
if (writeFile != null) {
try {
writeFile.close();
} catch (IOException e) {
log.fatal(e);
}
}
}
} else {
if (plist.exists()) {
plist.delete();
}
}
}else{
// для виндовса
String s = "";;
if(startup){
s = "cmd /C reg add HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v " +
"MySquperApp /t REG_SZ /d \"%PROGRAMFILES%\\MySquperApp\\MySquperApp.lnk\" /f";
}else{
s = "cmd /C reg delete HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run " +
"/v MySquperApp /f\r\n";
}
try {
Runtime.getRuntime().exec(s);
} catch (IOException e) {
log.fatal(e,e);
}
}
}