자바칩
Windows 부팅 후 .exe 파일이 자동으로 실행되게 하는 법 본문
728x90
성공 방법 보고 싶으면 바로 아래로 내리세요
실패 방법
public class AutoStartManager {
private static final Logger LOG = LoggerFactory.getLogger(AutoStartManager.class);
private static final String APP_NAME = "프로그램명"; // 프로그램 이름
private static final String APP_PATH = "C:\\프로그램명.exe"; // .exe 파일 경로
// Windows 시작 시 자동으로 실행되는 프로그램들을 관리하는 경로
private static final String WINDOWS_RUN_REGISTRY_PATH = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
public static void enableAutoStart() {
try {
Preferences preferences = Preferences.userRoot().node(WINDOWS_RUN_REGISTRY_PATH);
preferences.put(APP_NAME, APP_PATH); // 레지스트리 값 설정
String registeredPath = preferences.get(APP_NAME, null);
if (APP_PATH.equals(registeredPath)) {
LOG.info("Auto start registration successful: {}", registeredPath);
javax.swing.JOptionPane.showMessageDialog(
null,
"Auto start enable successfully.",
"Success",
javax.swing.JOptionPane.INFORMATION_MESSAGE
);
} else {
LOG.error("Auto start registration failed. Expected: {}, Found: {}", APP_PATH, registeredPath);
javax.swing.JOptionPane.showMessageDialog(
null,
"Failed to enable auto start.\nExpected: " + APP_PATH + "\nFound: " + registeredPath,
"Error",
javax.swing.JOptionPane.ERROR_MESSAGE
);
}
} catch (Exception e) {
LOG.error("Enable Auto Start is FAILE", e);
javax.swing.JOptionPane.showMessageDialog(
null,
"An error occurred while enabling auto start.\n" + e.getMessage(),
"Error",
javax.swing.JOptionPane.ERROR_MESSAGE
);
}
}
동작 방식
- Windows 시작 시 동작 프로세스:
- 컴퓨터 부팅 → 사용자가 로그인.
- Windows가 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run의 키들을 확인.
- 프로그램명 키가 존재하면, 해당 값( C:\프로그램명.exe)의 프로그램을 실행.
확인 방법
- 레지스트리 확인:
- Win + R → regedit → HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 확인.
- 프로그램명 키가 존재하고 값이 C:\프로그램명.exe인지 확인.
- 실제 실행 테스트:
- AutoStartManager.enableAutoStart()를 실행한 후 컴퓨터를 재부팅.
- 로그인 후 프로그램이 실행되는지 확인.
근데 난 이게 안됨 ㅠㅠ
그리고 이 방법은 프로그램을 무조건 관리자 모드로 실행해야 하는 단점이 있음
성공 방법
public class AutoStartManager {
private static final Logger LOG = LoggerFactory.getLogger(AutoStartManager.class);
private static final String APP_NAME = "프로그램명"; // 프로그램 이름
private static final String APP_PATH = "C:\\프로그램명.exe"; // .exe 파일 경로
private static final String COMMAND =
"reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v "
+ APP_NAME + " /t REG_SZ /d \""
+ APP_PATH + "\" /f";
public static void enableAutoStart() {
try {
Process process = Runtime.getRuntime().exec(COMMAND);
process.waitFor(); // 프로세스가 완료될 때까지 대기
if (process.exitValue() == 0) {
System.out.println("Auto start registration successful.");
} else {
System.out.println("Auto start registration failed.");
}
} catch (Exception e) {
LOG.error("Enable Auto Start is FAILE", e);
javax.swing.JOptionPane.showMessageDialog(
null,
"An error occurred while enabling auto start.\n" + e.getMessage(),
"Error",
javax.swing.JOptionPane.ERROR_MESSAGE
);
}
}
}
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v 프로그램명 /t REG_SZ /d "C:\프로그램명.exe" /f
이 명령어 cmd 창에 입력하면 알아서 레지스트리에 추가되고 컴퓨터 키자마자 자동으로 프로그램 실행됨
급하게 만드느라 코드가 지저분함
필요한 기능들을 모두 구현 완료 후 리팩토링 예정
'프로젝트' 카테고리의 다른 글
[Issue] JPAQueryFactory 객체 생성자 컴파일 에러 해결 방법 (1) | 2024.12.18 |
---|---|
[Issue] Locust를 사용하여 부하 테스트 진행 후 성능 최적화 (1) | 2024.09.15 |
[프로젝트] 공연 예매 연습 웹 사이트: ERD (0) | 2024.05.29 |