2011-10-09 10 views
2

"autostart"옵션이있는 C++ 응용 프로그램을 개발 중입니다. 사용자가 해당 옵션을 설정하면 프로그램은 을 Windows에서 다음 Windows 부팅 및 사용자 로그온시 Windows에서 시작되도록 변경해야합니다. 또한 사용자가이 옵션을 해제하면 프로그램에서 다시 설정해야합니다.Windows 부팅시 C++ 응용 프로그램 자동 실행

서비스로 앱을 실행할 필요가 없으므로 사용자 로그온 후 특정 사용자의 계정으로 실행할 수 있습니다. 그래서 내 응용 프로그램을 실행하는 Windows를 만드는 가장 좋은 방법은 무엇입니까. 다음 부팅 및 사용자 로그온시? 나는 시작 폴더를 사용할 충고를 봤다. 그게 가장 좋고 무해한 방법인가요?

  1. 시작 폴더를 검색하는 방법 :

    그렇다면, 나는이 개 질문이 있습니다. SHGetSpecialFolderLocation()의 결과가 만족스럽지 않습니다. WinXP 플랫폼 테스트 (C : \ Documents and settings \ % username %)에서 "HOME"디렉토리를 반환하는 것 같습니다.

  2. C++을 사용하여 .lnk 파일을 만드는 방법은 무엇입니까? 전체 .exe 파일을 복사하는 것은 좋지 않을 것이라고 생각합니다.

사실 내 프로그램은 크로스 플랫폼이지만 옵션 "자동 시작"은 Windows 전용입니다.

업데이트

  1. 이 SHGetSpecialFolderLocation을 시도하고는 Windows7에 좋은 가치를 가지고 : "C : \ 사용자 파벨 \의 AppData \ 로밍 \ 마이크로 소프트 \ 윈도우 \ 시작 메뉴 \ \ 프로그램 \ 시작" 주의 사항 : MinGW를 사용하는 경우 ShlObj.h를 포함하기 전에 _WIN32_IE를 0x0400으로 정의해야합니다.

  2. 레지스트리 (HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Run)와 시작 폴더를 사용하는 것 중에서 가장 좋은 솔루션은 무엇입니까?

+1

모든 사용자 또는 현재 로그온 한 사용자는 누구입니까? –

답변

3

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run과 같은 레지스트리 키를 사용하는 것이 좋습니다. 여기에 소프트웨어 이름과 주요 실행 경로 값으로 문자열 값을 만드십시오.이 값이면 충분합니다. .LNK 파일 생성 후 훨씬 쉽게 - 및 레지스트리 편집 API는 C++

UPDATE에서 쉽게 접근 할 수 있습니다 : @ 벤 제안으로

, 당신의 작업은 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run를 사용하는 것이 좋습니다. 이렇게하면 현재 사용자에 대해서만 앱이 자동 시작되며 첫 번째 제안은 모든 사용자에 대해이를 수행합니다.

UPDATE2 :

또한 당신이 자동 시작을 구현하기위한 무엇을 선택 방법, 당신은 프로그램이 자동 실행하기 위해 긴밀하게보고 적극적인 방어와 antiviruses의 대부분으로 바이러스 백신 소프트웨어 문제를 얻을 수 있습니다.

+3

Better :'HKLM' 대신'HKEY_CURRENT_USER'에서하십시오. –

+0

@ben 모든 의미에서 확실하지만 다른 점은 다른 의미입니까? –

+0

@BenVoigt : 네 말이 맞아. 그에 따라 내 대답을 업데이 트되었습니다. –

0

시작 폴더 항목은 부팅 할 때 로그인 할 때 발생합니다. 당신이 원하는 것과 같아요, 그냥 용어를 똑바로하고 싶습니다.

실제로 나는 SHGetSpecialFolderPathCSIDL_STARTUP이 상수라고 생각합니다. 문서를 올바르게 읽는다면 원하는 경로를 제공해야합니다.

0

SHGetSpecialFolderPath를 사용하여 시작 폴더의 경로를 결정합니다 (Michael Kohne의 답변 참조).

그런 다음이 폴더에 바로 가기를 만들려면 IShellLink을 사용하십시오.

편집 : 레지스트리에서 Run 키를 사용하는 것이 더 안정적이라고 생각합니다.

관련 문제