노무현 대통령 배너

Total Uninstall 4 + AutoIT 을 사용한 USB 프로그램 만들기

|





아래의 내용은
2007년 7월 1일 부터 8월 15일까지 3회에 걸쳐
USBoffice.cafe 의 세상(482629) 님께서 작성하신
"Total Uninstall 4 + AutoIT 를 사용한 USB 프로그램 만들기" 에 관련한 내용입니다
기본적인 내용은 지금도 젼혀 손색이 없는 듯합니다

본문 글과 첨부된 그림의 서버가 달라서
해당 계정이 없으면 그림이 안 보이시는 분들을 위해
개인적으로 내용을 크게 왜곡하지 않는 범위에서 첨삭을 하였습니다
이 게시물 하단에 원문 링크가 있습니다
(하단의 게시 내용은 게시 작성일 기준입니다)




 
안녕하세요?
USB HM Soft Ware의 주인장 HM입니다

USB용 프로그램을 만드는 방법입니다
우선 첨부 파일에 있는 Total Uninstall 4 등 첨부 파일을 다운로드 받으시길 권해드립니다
(현재의 버전에 맞는 설치와 스냅숏을 뜨는 설치 프로그램의 작성 예시는 여기 를 참고하시면 됩 듯합니다)

Total Uninstall 을 설치하시고 난 뒤 Setup 파일에 오른쪽 클릭을 하시면
위 그림과 같이 보입니다. 위 그림과 같이 모니터링 항목을 누릅니다


프로그램 이름은 적당히 쓰신 뒤 프로그램 경로는 그대로 하시고
다음 버튼 클릭

 

위 화면이 나타나면 아무것도 만지지 마시고
지금 설치 프로그램 실행(L) 버튼을 누르고 다음을 누릅니다


설치를 진행하기 위해 다음 클릭


설치를 진행하기 위해 다음 클릭


설치 경로는 그대로 두고 다음 클릭


시작 메뉴는 필요 없으므로
시작 메뉴 폴더를 만들지 않기 를 선택하고 다음 클릭


취향에 맞게 설정하시고 다음 클릭


확인을 눌러 레지스트리에 적용되게 하신 후
다시 한 번 실행한 다음 종료합니다


Total Uninstall 4 로 돌아가셔서 '다음' 을 클릭합니다


위와 같은 창이 뜨면 닫기 버튼 클릭


위와 같은 창이 보이면 폴더를 하나 만듭니다


폴더 이름은 상관 없습니다


Program Files 의 ESTsoft 를 오른쪽 클릭하시면
"복사" 버튼이 있습니다. 버튼을 누른 뒤
포터블~^^ 폴더 안에 붙여넣기 한 뒤 이름을 data 로 바꿉니다
그리고 포터블~^^ 폴더의 data 폴더 안에 Setting 폴더라는 폴더를 만드시고
Registry 폴더를 만듭니다


상단에 보면 파일 - 내보내기 - 레지스트리 변경 항목 을 클릭하면
위와 같은 창이 뜹니다. 우선 삭제된 값, 삭제된 키 에 체크 해제하시고
설치 파일 에 체크하신 후 다음 확인 버튼을 누릅니다


위에서 만든 포터블~^^ \ data \ Setting \ Registry
Set 이라는 이름으로 레지스트리를 저장합니다


한 번 더 상단에 보면
파일 - 내보내기 - 레지스트리 변경 항목 을 클릭하셔서
삭제된 키, 삭제된 값 에 체크 해제하시고
언인스톨 파일 에 체크하신 뒤 확인을 누릅니다


이번에도 역시 방금 만든
포터블~^^\data\Setting\Registry del 이라는 이름으로
레지스트리를 저장합니다


그 다음 포터블~^^\data\Setting\
System32 라는 폴더를 하나 만듭니다
그리고 ALZALZ.BIN 과 ALZZip.BIN 에 하나하나씩 복사해서
방금 만든 System32 폴더에 넣습니다


한 번 더 포터블~^^\data\Setting\ 에 Application Data 라는 폴더를 만들고
Application Data의 ESTsoft를 복사합니다
그리고 방금 만든 Application Data 에 붙여넣기 합니다

위까지 하셨으면 AutoIT으로 소스를 만들면 되는데
AutoIT을 사용하는 방법은 2부에서 계속하도록 하겠습니다

- 1부 끝 -




 
약속한대로 2부에서는 이어서
AutoIT을 사용하는 방법을 배우겠습니다
우선 컴퓨터에 AutoIT이 설치되지 않은 분은
1부에서 AutoIT을 다운받아서 설치해주세요

AutoIT 설치 과정 1


설치 진행을 위해 Next 버튼 클릭


'I Agree' 클릭


'Run the script' 에 체크하시고
Next 버튼 클릭


'Install' 버튼 클릭



'Finish' 버튼을 눌러 설치를 마칩니다

실전 2

시작 - 모든 프로그램 - AutoIt v3-Compile Script to.exe 를 실행하신 후 종료시킵니다
(오른쪽 버튼 메뉴를 만들기 위해서 입니다)
 

위 단계에서 만들었던 포터블~^^ 폴더로 이동합니다
오른쪽 버튼 - 새로 만들기 - AutoIt v3 Script 를 클릭하신 후
새 AutoIt v3 Script 를 '소스'로 파일 이름을 바꿉니다


AutoIt 언어를 짜기 전에 미리 중요한 것을 실습할 것입니다
이 부분은 실전에 아주 많이 쓰이니 잘 보셔야 됩니다

레지스트리 적용


잘 아시겠지만 굳이 뜻을 풀이하자면
RunWait 는 실행하다 이고
("regedit.exe /s data\Setting\Registry\set.reg") 라고 적힌 것은

지난 번에 만든 data\Setting\Registry\set.reg
창 없이 레지스트리에 적용하라는 뜻을 가지고 있습니다
@ScriptDir 은 소스가 실행되는 폴더를 말합니다

폴더 복사


구문 해석을 하면 DirCopy 는 폴더를 복사하다 란 뜻이고

(@ScriptDir & "data\Setting\Application Data\ESTsoft", @AppDataDir & "\ESTsoft")
라는 것은 data\Setting\Application Data\ESTsoft 의 폴더를
C:\Documents and Settings\사용자 이름\Application Data\ESTsoft 에 복사하라는 뜻입니다
여기서 주목해야 할 것은 @AppDataDir 입니다 @AppDataDir 는 매크로 라고 합니다

예시

@AppDataCommonDir
=C:\Documents and Settings\All Users\Application
@AppDataDir =C:\Documents and Settings\사용자 이름\Application Data
@CommonFilesDir =C:\Program Files\Common Files
@ComSpec =C:\WINDOWS\system32\cmd.exe
@DesktopCommonDir =C:\Documents and Settings\All Users\바탕화면
@DesktopDir =C:\Documents and Settings\사용자 이름\바탕화면
@DocumentsCommonDir =C:\Documents and Settings\All Users\Documents
@FavoritesCommonDir =C:\Documents and Settings\All Users\Favorites
@FavoritesDir =C:\Documents and Settings\사용자 이름\Favorites
@HomeDrive =C:
@HomePath =C:\Documents and Settings\사용자 이름
등등
첨부 파일 Macro.exe 에 자세하게 설명되어 있습니다
 
파일 복사


FileCopy 는 말 그대로 파일을 복사한다 라는 뜻입니다
 
(@SystemDir & "ALZALZ.BIN", @ScriptDir & "data\Setting\System32")
 
C:\Windows\System32 의 ALZALZ.BIN 파일을 소스가 실행되는 곳의
data\Setting\System32 에 복사하라는 뜻입니다
 
폴더 삭제
 

DirRemove 는 디렉터리 삭제의 줄임말로
폴더를 삭제한다는 뜻입니다

(@AppDataDir & "\ESTsoft", 1) 는
C:\Documents and Settings\사용자 이름\Application Data\ESTsoft 라는 폴더를
삭제하라는 뜻입니다. 1 은 1초 안에 처리하라는 뜻입니다

파일 삭제


FileDelete
는 말 그대로 파일을 삭제한다는 뜻입니다
내용을 풀이하면 C:\Windows\System32 의 ALZALZ.BIN 을
삭제하라는 내용입니다
 
실전

RunWait("regedit.exe /s data\Setting\Registry\set.reg", @ScriptDir)
; 프로그램의 레지스트리를 실행한다

DirCopy(@ScriptDir & "data\Setting\Application Data\ESTsoft", @AppDataDir & "\ESTsoft")
;프로그램 데이터를 등록시킨다

DirCopy(@ScriptDir & "data\Setting\System32", @SystemDir)
;프로그램 내용을 등록시킨다

RunWait("data\ALZip\ALZip.exe")
;알집을 실행합니다

DirCopy(@AppDataDir & "\ESTsoft", @ScriptDir & "data\Setting\Application Data\ESTsoft")
;프로그램의 데이터를 저장합니다

FileCopy(@SystemDir & "ALZALZ.BIN", @ScriptDir & "data\Setting\System32")
;프로그램 내용을 저장합니다

FileCopy(@SystemDir & "ALZZip.BIN", @ScriptDir & "data\Setting\System32")
;프로그램 내용을 저장합니다

DirRemove(@AppDataDir & "\ESTsoft", 1)
;컴퓨터에 있는 알집의 데이터를 삭제합니다

FileDelete(@SystemDir & "ALZALZ.BIN")
;컴퓨터에 있는 알집의 내용을 삭제합니다

FileDelete(@SystemDir & "ALZZip.BIN")
;컴퓨터에 있는 알집의 내용을 삭제합니다

RunWait("regedit.exe /s data\Setting\Registry\del.reg", @ScriptDir)
;컴퓨터에 있는 알집의 레지를 삭제합니다

sleep("300")
;3초간 아무것도 하지 않는다
;(CPU 사용률 감소)

Exit
;종료한다


어땠나요? 조금 힘들으셨나요?
수고하셨습니다
이 정도만 알아도 웬만한 것은 충분히 무설치로 만들수 있습니다
다음 강좌에서는 Thinstall 을 사용해서
무설치 프로그램을 만드는 방법을 배울 것입니다
제가 너무 강좌에 약해서 의견만 앞섰지 표현을 잘못한것 같군요

-끝-




 
지난 강좌에서 시간 관계로 알려드리지 못했던 것들을
마무리 지으려 2부 강좌에서 끝날 강좌를 3부에 이어서 계속합니다

AutoIt 으로 DLL 과 OCX 등록하기
 
포터블 프로그램을 만들다 보면 수 많은 dll과 ocx를 만나게 됩니다
다행이 자신이 등록되어 있지 않으면 자동으로 등록되는 DLL과
OCX는 있지만 자동으로 등록되지 않는 것들이 있습니다
 
이런 DLL과 OCX 중 필요한 것과  필요하지 않은 것들도 물론 있습니다
이런 DLL과 OCX를  찾아내려면 일종의 노가다를 시작해야 합니다
노가다가 귀찮을 경우에는 그냥 넘어가도 괜찮지만 찾아내는 것이 중요하겠죠

많이들 알고 계시는 컴퓨터 청소 프로그램인
CCleaner 를 예시로 진행합니다


우선 아래의 첨부 파일 중에서
"CCleaner 설치 파일" 을 다운받아 설치해 주세요


설치가 완료된 뒤 "C:\Program Files\CCleaner"로 들어가보면 위와 같은 창이 보입니다

지난 번과 같이 "포터블"이라는 곳에 Data 라는 폴더를 넣고 이 모든 파일을 집어넣습니다
그런 후 uninst.exe 를 실행해서 CCleaner 를 삭제합니다

다음 AutoIt 스크립트를 "포터블" 에 하나 만듭니다
우선 CCHelper.ocx 가 필요한 OCX 인지 확인해 볼까요?
그러기 위해서 아래와 같이 적습니다

Runwait("regsvr32 /s CCHelper.ocx", @ScriptDir & "\Data")

설명하면
Runwait("regsvr32 /s 등록할 파일 이름", "위치") 이렇게 생각하시면 됩니다
이렇게 작성한 뒤 Data의 ccleaner.exe를 실행시키는 명령어를 넣고 F5를 눌러봅니다


CCListBar 를 요구하면서 종료가 됩니다
이런 명령어를 여러개 넣어서 필요한 dll 과 ocx 를 알아내면
다음 줄에 CCleaner 가 실행된 뒤에 dll과 ocx를 해제하는 명령어를 넣어봅니다
 
(예제)
Runwait("regsvr32 /u /s Shutup.dll", @ScriptDir & "\Data\Getaway\")
설명하면 위와 같지만 /u 밖에 붙지 않았습니다. 간단하죠?

Run 과 RunWait ?

RunWait 는 파일을 실행하고 기다리라는 뜻이고
Run 은 실행하고 그냥 다음 명령으로 넘어가라는 뜻입니다
 
특정 '프로세스'가 실행되어 있을 때 기다리기 ?

모 사이트의 사전에 따르면 프로세스
"실행 중인 프로그램"이라는 뜻이라고 나와있는데
포터블 프로그램을 만들다 보면
프로그램이 실행될 때 또 다른 프로그램이 실행되는 경우가 종종 생기곤 합니다

이럴때  그 프로세스를 기다리지 않고  그냥 다음 명령줄로 넘어가면
자칫  큰 문제가 발생할 수 있습니다
이럴 때는 If processexists 명령문과 processwaitclose 명령문을 사용하시면
손쉽게 해결할 수 있습니다

(예제)
If processexists("What.exe") Then
processwaitclose("What.exe")

좀 더 세부적으로 설명하면 If 는 조건문으로 '
만약에' 란 뜻이고
processexists
'프로세스가 존재할 때'라는 뜻을 가지고 있습니다
Then 은 '그 다음' 이라는 뜻입니다

processwaitclose 는 그냥 내용 그대로
프로세스가 종료될 때까지 기다리라는 뜻입니다
(만약 What.exe 라는 프로세스가 실행되어 있으면
그 프로세스가 종료 될 때까지 기다리라는 뜻입니다)

메시지 창 포터블 프로그램 만들 때 활용하기

컴퓨터에 기존 프로그램이 설치되어 있을 경우
동일한 프로그램의 포터블 버전을 다시 실행, 등록 등을 하면
아무래도 컴퓨터에 좋지 않은 영향이 있을 수 있습니다
 이로 인해 각종 오류나 크러시가 생길 수 있는 원인도 되고요

이럴 때 메시지 창으로
"프로그램이 설치되어 있습니다 프로그램을 종료합니다"
라는 창을 띄우고 종료가 되면 편리하겠지요
그러기 위해선 Msgbox 를 짚고 넘어가는 것이 편합니다
간단한 설명입니다

MsgBox(0, "제목창", "내용")

 위 구문 중
0 은 창에 표시될 형식입니다만 기본으로는
느낌표(!)는 48, 물음표(?)는 32, 엑스(X)는 16 입니다

If FileExists 방금 우린 If 의 뜻을 배웠기 때문에 간단히 설명하면
내용은 '파일이 존재할 때'라는 뜻입니다. 이러한 내용을 활용하면

(예제)  
If FileExists(@HomeDrive & "\이지X린\") Then
MsgBox(16, "프로그램이 설치되어 있습니다", "프로그램이 설치되어 있습니다. 종료합니다")

Exit

이렇게 만들 수도 있습니다. 저는 실전에는 이렇게 만들지는 않지만
이걸 기본 틀로 해서 배우셨으면 해서 말씀드렸습니다

레지스트리 등록 & 삭제 & 저장
 
포터블을 만들다 보면 엄청난 레지스트리와 평범한 레지스트리를 만나게 됩니다
레지스트리를 등록하시려면 RegWrite("레지스트리 경로", "이름", "REG_SZ", "파일 경로") 이렇게 사용합니다
 
(예제)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\coffeeprince", "고은찬", "REG_SZ", "C:\")

그리고 HKEY_LOCAL_MACHINE\SOFTWARE\coffeeprince 라는 곳에
파일이 여러개 등록되어 있으면 아래와 같은 방법으로 등록할 수 있습니다

(예제)
$File1 = "HKEY_LOCAL_MACHINE\SOFTWARE\coffeeprince"
RegWrite($File1,"고은찬","REG_SZ", @ScriptDir & "C:\")
RegWrite($File1,"최한결","REG_SZ", @ScriptDir & "C:\")
RegWrite($File1,"한유주","REG_SZ", @ScriptDir & "C:\")
RegWrite($File1,"최한성","REG_SZ", @ScriptDir & "C:\")
 
설명하면 $File1 은 자신이 등록 가능한 매크로 라고 생각하시면 됩니다

$File1 이 아니라 $coffeeprince 이렇게 바꾸고 = "HKEY_LOCAL_MACHINE\SOFTWARE\coffeeprince" 의 내용을
자신이 소스에서 1111111111111111 자주 쓰는 것을 위와 같은 명령어로 줄여서 $1 로 간단히 줄일수 있습니다
레지스트리 저장은 RunWait 로 아래와 같이 간단히 저장할 수 있습니다

(예제)
RunWait('regedit /e 1.reg "HKEY_CURRENT_USER\Software\USB Soft', @ScriptDir & "\Data\")

간단하게 풀이하자면 Data1.reg
HKEY_CURRENT_USER\Software\USB Soft 의 내용을 저장하라는 내용입니다
1.reg 파일이 없으면 자동으로 만들기 때문에 여러 활용도가 높은 명령어 입니다

inf 설치 방법 ?

처음에는 inf 를 모르고 설치하지 않고 포터블로 만들었다가
오류난 적이 있는 분이 계실 겁니다
inf 를 등록하려면  설치할 때는
RunWait 를 활용하여
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\*.inf 를 사용하시면 되고
해제 하시려면 rundll32 syssetup,SetupInfObjectInstallAction DefaultUninstall 132 .\*.inf
사용하시면 됩니다

(예제)
RunWait("rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\4821.inf")
RunWait("rundll32 syssetup,SetupInfObjectInstallAction DefaultUninstall 132 .\4821.inf")
 
간단하게 요약하면
4821.inf 를 등록하고 해제하라는 뜻입니다



 
위 내용은 아래의 링크가 본문이며
본문 글과 첨부된 그림의 서버가 달라서
해당 계정이 없으면 그림이 안 보이시는 분들을 위해
개인적으로 내용을 크게 왜곡하지 않는 범위에서 첨삭을 하였습니다

1부
http://cafe.naver.com/usboffice/6329

2부
http://cafe.naver.com/usboffice/6860

3부
http://cafe.naver.com/usboffice/8172
 
 
 
 
 
 
 
 

 
And