자바칩

Windows 부팅 후 .exe 파일이 자동으로 실행되게 하는 법 본문

프로젝트

Windows 부팅 후 .exe 파일이 자동으로 실행되게 하는 법

아기제이 2025. 1. 13. 17:20
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 시작 시 동작 프로세스:
    1. 컴퓨터 부팅 → 사용자가 로그인.
    2. Windows가 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run의 키들을 확인.
    3. 프로그램명 키가 존재하면, 해당 값( C:\프로그램명.exe)의 프로그램을 실행.

확인 방법

  1. 레지스트리 확인:
    • Win + R → regedit → HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 확인.
    • 프로그램명 키가 존재하고 값이 C:\프로그램명.exe인지 확인.
  2. 실제 실행 테스트:
    • 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 창에 입력하면 알아서 레지스트리에 추가되고 컴퓨터 키자마자 자동으로 프로그램 실행됨


 

급하게 만드느라 코드가 지저분함

필요한 기능들을 모두 구현 완료 후 리팩토링 예정