2008. 8. 19. 16:56

Windows 프로그램을 시작 프로그램으로 등록하기



MS Windows를 부팅할 때 자동으로 시작하는 프로그램을 볼 수 있다.
그리고 실제 자신이 작성한 프로그램도 그런 프로그램들 처럼 Windows가 시작할 때 자동으로 실행시킬 수 있다.

방법은 여러가지가 있다.

첫번 째는 가장 쉬운 방법으로 "시작 프로그램에 바로가기 복사"를 하는 방법이다.
"C:\Documents and Settings\사용자 폴더\시작 메뉴\프로그램\시작프로그램"에 자동으로 시작하기를 원하는 프로그램의 바로가기를 복사하면 된다.

두번 째는 "win.ini 파일에 등록"하는 방법이다.
"시작 -> 실행 -> sysedit" 를 실행 하여, 자동으로 실행하고자 하는 프로그램을 등록하면 된다.
load - Windows가 부팅할 때 자동으로 시작하는 프로그램을 등록한다.
run - load와 같이 자동  시작 프로그램을 등록한다.

세번 째는 "registry에 등록"하는 방법이다.
"HKEY_LOCAL_MACHINE의 Software\Microsoft\Windows\CurrentVersion\run"가 시작프로그램들이 위치하는 레지스트리의 위치이다. 이곳에 자동으로 시작하는 프로그램을 등록하면 된다.

아래와 같이 하면 자신이 작성하는 프로그램에 직접 소스코드를 넣어서 레지스트리에 등록하여 Windows가 실행 시 자동으로 실행하게 할 수도 있다.
#include <windows.h>
#include <assert.H>

bool cs_util_register_start_Prog  (const char*  sValue, const char*   sPath)
{
    HKEY hKey;
    DWORD dwDisp;
    DWORD dwSize;

   if( sValue == NULL || sPath == NULL)
   {
       return false;
    }
 
    assert(sValue != NULL);
    assert(sPath != NULL);

    if( RegCreateKeyEx (HKEY_LOCAL_MACHINE,
                                 "Software\\Microsoft\\Windows\\CurrentVersion\\run",
                                 0, NULL,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
                                 NULL, &hKey, &dwDisp) != ERROR_SUCCESS)
    {
        if(hKey != NULL)RegCloseKey(hKey);
        return false;
    }
     dwSize = strlen(sPath);

    if( RegSetValueEx (hKey, sValue, 0, REG_SZ ,(LPBYTE)sPath, dwSize ) != ERROR_SUCCESS)
    {
        RegCloseKey(hKey);
        return false;
    }

    RegCloseKey(hKey);
    RegFlushKey(hKey);

    return true;
}

....

void main()
{
    cs_util_register_start_Prog("레지스트리에 등록할 이름","등록할 프로그램의 경로");
    // ex) cs_util_register_start_Prog("test_program","c:\\test_program.exe");
    ....
}

대충 이렇게 해서 테스트 해보니.. 위의 루틴을 삽입한 프로그램을 한 번 실행 시키게 되면, 레지스트리에 위의 프로그램이 등록이 되더군...

대략 설치 파일에 이런 부분을 넣으면 편할 듯 하지만, 단순히 실행파일을 시작과 동시에 실행시키기엔 첫번 째 방법이 가장 쉽고 편할듯... ^^;

참고 : http://blog.naver.com/tija98?Redirect=Log&logNo=120037882771