JHB의 프로그래밍 삽질기

Vista이상에서 UAC(사용자 계정 컨트롤) 상태에서 시작 프로그램 실행하기 본문

PROGRAMMING/C C++ MFC

Vista이상에서 UAC(사용자 계정 컨트롤) 상태에서 시작 프로그램 실행하기

roter 2010.04.24 16:16


와....
진짜 이거 할려고 얼마나 뻘짓을 많이 했던가 -.-;;

국내에 있는 수 많은 게시글을 다 뒤지고 다녀도 찾을 수가 없어서 직접 알아냈다.
우선 링크는

http://msdn.microsoft.com/en-us/library/aa384006(v=VS.85).aspx

여기..

문제가 뭐냐면
비스타에서 사용자 계정 컨트롤러(UAC라고 해서 User Account Control..)를 사용하여 보안모드 상태일 경우 프로그램 실행하는것 조차 까다롭게 된다. 프로그램 배포시에 사용자에게 'UAC를 풀고 사용해라!'라고 하면 참 좋겠지만 그게 어디 쉽나..
여튼..
UAC가 활성화 된 상태에서 내가 만든 프로그램을 섣불리 Start Up(시작 프로그램)에 등록할려고 하면 Windows Defender가 우리의 프로그램을 차단해 버린다. 아하하하... 그럼 사용자에게 풀라고 하면 될 것 아닌가 -_-?? 라고 하면 웃기고..
여튼..

VISTA이후 버전 부터는 작업 스케쥴러 버전이 2.0으로 강화되어서 이것 저것 기능을 많이 지원한다.
Task Scheduler 2.0이라고 해서..
여기다가 '사용자가 로그인 할 때'마다 '프로그램을 실행'하도록 등록해주면 된다.
처음에 이걸 어떻게 하냐.. 생각해서 xml작성하고 vs c++로 코딩해보고 뻘짓을 참 많이 했는데
아주 간단히 커맨드로 해결 되더라..

cmd를 run as administrator로 실행해서

schtasks /create /sc onlogon /tn 태스크이름 /rl highest /tr 실행 경로
입력해 주면 된다.. 결국 프로그램에서 위의 커맨드를 실행하도록 하면 된다는거..(물론 프로그램도 어드민 권한으로 실행해야겠죠)

아주 쉽다..
중요한 포인트는 '/rl highest'이다. 최상위 권한으로 실행한다는 얘기이다.. 이거 안해주면 또 다시 windows defender에 막히겠지용 ~_~
그리고 또 발견된 문제는 실행 경로에 띄어쓰기가 들어갈 경우 에러 난다는 것이다. 이건 뭐 알아서 처리하고.. program files의 경우는 progra~1로 매크로 돼있으니까 글케 하면 된다.
음.. 모를거 같아서 알려드리자면 vs6.0에서 해당 경로에다가 파일 넣고 '맨처음'컴파일 할려 그러면 '~~~~경로에 있는걸 컴파일 하시겠습니까?'라고 물어본다. 그때 이름 긴거나 띄어쓰기 돼있는 넘들은 다 매크로 처리돼서 나온다. 그 경로 그대로 사용하면 된다.. 이거 말고 알아내는 다른 방법 아는 분은 코멘트좀..

즉 우리 회사 프로그램의 경우

schtasks /create /sc onlogon /tn tdigi /rl highest /tr "c:\progra~1\digitech\digitouch\digitouch.exe"
이렇게 해서 등록했다.

이 방법 말고도 service등록해서 시작 프로그램 띄우는 방법이 있다고도 하는데.. 그 방법은 gui프로그램의 경우 자동 시작되지 않는다고 한다..

한번 테스트 해보고 싶으면
system("schtasks /create /sc onlogon /tn tdigi /rl highest /tr notepad.exe");
를 프로그램에 추가해보시길.. (근데 이거 추가하면 v3가 바이러스로 잡네요 -_-? 어쩌자는거지..)

그럼 모두 삽질하지 않기를 바라며.. 오늘도 수고~


--------------------------------------------------------------------------------------------------
라고 데브피아에 글을 썼다가 까였다 -_-;; 까인 코멘트는..

짱이긴 뭐가 짱이라는건지?
클라이언트 환경은 제각각이란거 모르시나요?
schtasks.exe없거나 Path지정 안되어 있으면 당장에 실패할 코드 -_-;
그리고 서비스를 하나 만들 경우 GUI App를 로드해주도록 만들어주면 되는거구요.
또한 틸드 문자같은 경우 GetLongPathName()등으로 해결하면 깔끔해지죠.
결국 run as administrator로 띄울거라면 UAC를 회피하는 것도 아닌데다가
Windows Defender를 뚫었다는것 역시 어불성설입니다 -_-;
제목과 내용이 전혀 매칭되지 않네요.

schtasks.exe를 사용하는거라면 MSDN까지 갈 것도 없습니다.
링크도우미 : ms-its:C:\WINDOWS\Help\ntcmds.chm::/schtasks.htm

라고...ㅠㅠ... 감사요.. GUI app를 공부해야겠다..
5 Comments
  • 프로필사진 질문 2010.07.29 14:05 신고 안녕하세요
    님이 올리신 글 중에 한가지 문의드릴게 있어서 이렇게 글을 올리게되었습니다..

    Vista이상에서 UAC(사용자 계정 컨트롤) 상태에서 시작 프로그램 실행하기 이 글에 대해 한가지 문의드립니다

    vs2008에서 작업중이고..관리자 모드로 권한상승해줬습니다
    비스타에서 부팅 중 자동 실행 시킬려고 하는데 아시다 시피 비스타는 차단 시키잖아요
    이 차단 시키는 것을 해제하고 프로그램이 자동 실행되도록 하고 싶은데

    cmd를 run as administrator로 실행해서

    schtasks /create /sc onlogon /tn 태스크이름 /rl highest /tr 실행 경로
    입력해 주면 된다. 라고 적어주셨는데 이 부분에 대해 조금만 더 설명해 주실 수 있을신가요??

    어디를 어떻게 하라는 건지 잘모르겠네요..;;;
    조언부탁드립니다..ㅠㅜ
  • 프로필사진 BlogIcon roter 2010.08.02 12:08 신고 cmd를 명령 프롬포트라고 적으면 이해하실려나요??
    시작 버튼 누르시고
    xp의 경우는 보조프로그램->명령 프롬포트
    가 있는데.. 현재 제가 비스타가 안깔려있어서 확인이 힘드네요. 아마 뒤져보면 명령 프롬포트가 있을거에요~ 도스창 모양으로 생긴거..
    그걸 바로 실행하지 마시고 마우스 오른쪽 버튼을 클릭하셔서 '관리자 권한으로 실행'하신 후 schtasks... 를 입력하시면 된다는 얘기입니다~~
  • 프로필사진 질문 2010.08.03 10:53 신고 답변달아주셔서 감사합니다
    알려주신데루 등록하고 등록이 완료되었다는 메세지까지 나왔서 컴퓨터를 재 부팅 확인해 봤는데
    반응이 없네요

    schtasks /create /sc onlogon /tn 태스크이름 /rl highest /tr 실행 경로 입력 후 등록이 완료되면 재 시작 시 실행 경로에 있는 프로그램이 실행되야 하는게 맞는거죠???
  • 프로필사진 BlogIcon roter 2010.08.09 10:20 신고 흠~
    제어판의 작업 스케쥴러 들어가셔서 태스크가 제대로 등록됐는지 확인해보세요~
    태스크이름을 찾아서 더블클릭하면 내용이 상세히 들어가있을겁니다. 작업 스케쥴러 직접 들어가셔서 몇 번 만지다 보시면 감이 오실거에요.
  • 프로필사진 테엘 2011.11.28 06:06 신고 manifest?
댓글쓰기 폼