▣중-고급자 활용/그게 궁금해?

[WSH] Windows Script Host 활용-Winrar (2)

횡재수 2008. 7. 26. 03:14

곰플레이어를 이용하여 설치파일을 만들어 봅시다.


    - GOMPLAYERSETUP.EXE (곰플레이어 설치파일)
    - GOM.VBS
    - GOM.REG
    - WinRAR (자동풀림 설치파일 생성)

[1] GOM.VBS

Option Explicit

On Error Resume Next
Err.Clear

Dim Shell : Set Shell = WScript.CreateObject("WScript.Shell")
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
Dim EnvSys : Set EnvSys = Shell.Environment("Process")
Dim ProgramDir : ProgramDir = EnvSys("ProgramFiles") ' C:Program Files
Dim COMSPEC : COMSPEC = Shell.ExpandEnvironmentStrings("%COMSPEC%")

If (FSO.FileExists("GOMPLAYERSETUP.EXE")) Then
    Shell.Run COMSPEC & " /c GOMPLAYERSETUP.EXE & Exit", 0
    Wscript.Sleep 3000
    Shell.AppActivate "곰플레이어 설치"
    Wscript.Sleep 1500
    Shell.SendKeys "~"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "~"
    Wscript.Sleep 2000
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "~"
    Wscript.Sleep 2000
    Shell.SendKeys "{DEL}"
    Wscript.Sleep 1500
    ' 설치폴더 변경 (GRETECH... 이 아니라 C:Program FilesGomPlayer)
    Shell.SendKeys ProgramDir & "GomPlayer"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Wscript.Sleep 1500
    Shell.SendKeys "{TAB}"
    Shell.SendKeys "~"
    Wscript.Sleep 5000
    Shell.AppActivate "곰플레이어 설치"
    Shell.SendKeys "{TAB}"
    Shell.SendKeys "~"
Else
    Shell.Popup "GOMPLAYERSETUP.EXE를 찾을 수 없습니다.", 3, "File dose not exist", 48
    WScript.Quit
End if


'------------------------------------------------------------------------

Dim AllPrograms : AllPrograms = Shell.SpecialFolders("AllUsersPrograms")
Dim OldShortDir : OldShortDir = AllPrograms & "아이팝 (www.ipop.co.kr)"
Dim NewShortDir : NewShortDir = AllPrograms & "GomPlayer"
Dim ExeLink, ManLink, UnLink

FSO.DeleteFolder OldShortDir
FSO.CreateFolder NewShortDir

' 단축키 설정 (옵션)
Set ExeLink = Shell.CreateShortcut(NewShortDir & "곰플레이어.lnk")
ExeLink.HotKey = "CTRL+SHIFT+G"
ExeLink.TargetPath = ProgramDir & "GomPlayerGom.exe"
ExeLink.WorkingDirectory = ProgramDir & "GomPlayer"
ExeLink.Save

Set ManLink = Shell.CreateShortcut(NewShortDir & "곰매니저.lnk")
ManLink.TargetPath = ProgramDir & "GomPlayerGomMgr.exe"
ManLink.WorkingDirectory = ProgramDir & "GomPlayer"
ManLink.Save

Set UnLink = Shell.CreateShortcut(NewShortDir & "곰플레이어 제거.lnk")
UnLink.TargetPath = ProgramDir & "GomPlayerUninstall.exe"
UnLink.Save

' 레지파일 병합
Shell.Run  "regedit /s GOM.REG"

' 파일.Attributes = 1  :  파일(_ad_temp_.ini )의 속성을 읽기전용으로 지정.
Dim iniFile : ProgramDir & "GomPlayer_ad_temp_.ini"
Dim iniFile1 : Set iniFile1 = FSO.CreateTextFile(iniFile, true)
Dim iniFile2 : Set iniFile2 = FSO.GetFile(iniFile) ' iniFile1 이 아니라 iniFile 을 열어야 함
iniFile2.Attributes = 1

' 언어 및 기타 설정 (영문 윈도 or 설치후 첫 실행시 설정창 뜰 경우 필요)
Shell.Exec(ProgramDir & "GomPlayerGomWiz.exe")
Wscript.Sleep 2000
Shell.AppActivate "언어 선택"
Wscript.Sleep 2000
Shell.SendKeys "~"
Wscript.Sleep 1000
Shell.SendKeys "{TAB}"
Wscript.Sleep 1000
Shell.SendKeys "{TAB}"
Wscript.Sleep 1000
Shell.SendKeys "~"
Wscript.Sleep 1500

' 3초간 팝업메시지 표시
Shell.Popup  "곰플레이어 설치가 완료되었습니다.", 3

Set Shell = Nothing
Set FSO = Nothing
Set EnvSys = Nothing
Set iniFile1 = Nothing
Set iniFile2 = Nothing

WScript.Quit


[2] GOM.REG

Windows Registry Editor Version 5.00

; ASF, mpeg, WMV => 마우스 우측 버튼 등록
[HKEY_CLASSES_ROOTASFFileshellOpen with GomPlayer]
@="GomPlayer로 열기(&G)"

[HKEY_CLASSES_ROOTASFFileshellOpen with GomPlayercommand]
@="C:\Program Files\GomPlayer\Gom.exe "%1""

[HKEY_CLASSES_ROOTmpegfileshellOpen with GomPlayer]
@="GomPlayer로 열기(&G)"

[HKEY_CLASSES_ROOTmpegfileshellOpen with GomPlayercommand]
@="C:\Program Files\GomPlayer\Gom.exe "%1""

[HKEY_CLASSES_ROOTWMVFileshellOpen with GomPlayer]
@="GomPlayer로 열기(&G)"

[HKEY_CLASSES_ROOTWMVFileshellOpen with GomPlayercommand]
@="C:\Program Files\GomPlayer\Gom.exe "%1""

; 옵션 설정
[HKEY_CURRENT_USERSoftwareGRETECHGomPlayerOPTION]
"bActiveMsg"=dword:00000000
"bCheckUpdate"=dword:00000000
"bNotifyUpdate"=dword:00000000
"nOnTopMode"=dword:00000002
"bNotifyMinorUpdate"=dword:00000000
"idMenuLang"=dword:00000412
"idAudioLang"=dword:00000412
"idSubtitlesLang"=dword:00000412


[3] WinRAR - Self Extract Commander

Path=GomPlayer
SavePath
Setup=gom.vbs
TempMode
Silent=1
Overwrite=1

==========================================================================

WSH를 이용한 곰플레이어 1.9 자동 설치 스크립트입니다.
Shell.ExpandEnvironmentStrings("%COMSPEC%") 는 환경변수인 COMSPEC 에 대한
정보를 읽어들인다는 뜻인데, XP나 2003에서는 system32폴더의 cmd.exe 가 됩니다.
이건 여러 운영체제를 고려한 것으로 XP나 2K3 만을 쓴다면 환경변수 읽어 올 필요없이
"cmd /c GOMPLAYERSETUP.EXE & Exit" 로 해도 됩니다.
ProgramDir 역시 프로그램 폴더가 C:Program Files 로 고정되어 있다면 환경에서 읽어올 필요없이
바로 C:Program Files 로 써도 됩니다.

Shell.Run COMSPEC & " /c GOMPLAYERSETUP.EXE & Exit", 0 는 커맨더 명령창을 통해
곰플레이어 설치파일을 실행하고 실행이 끝나면 명령창을 닫으라는 의미입니다.
Run 뒤의 두번째 옵션, 즉 , 0 은 실행창(커맨더창)은 숨기고 다른 창(설치창)을
활성화하라는 뜻인데, 창의 형태를 지정하는 , 0 이 없을 경우 설치창 뒷배경으로
커맨더창이 떠 있게 됩니다.
Run 을 쓸때는 대개 해당 프로그램이나 명령이 다 실행될 때까지 기다리라는 뜻으로 뒤에
,true 를 붙이는 경우가 많은데, 여기서는 Run 이 실행시킨 프로그램이 곰플레이어 설치
프로그램이 아니라 어디까지나 커맨더창이므로 ~Exit", 0, true 식으로 뒤에 true 를 붙이면
안됩니다. true 를 붙이면 커맨더창이 실행된 상태에서 멈추고 다음 입력을 기다리게 되므로
곰플레이어 설치 첫 화면이 뜨고 그대로 멈추어 있게 됩니다.

설치창이 활성화되면 SendKeys를 이용한 자동 키보드 입력 과정이 진행됩니다.
설치될 폴더는 C:Program FilesGomPlayer 로 변경되며, 변경하지 않으려면 위의 설치폴더
입력 부분을 삭제하고 바로가기의 타겟과 레지스트리의 설치폴더 부분도 편집해야 합니다.

그리고 시작메뉴의 아이팝 (www.ipop.co.kr) 폴더를 삭제하고 새로 GomPlayer란
시작메뉴를 만들도록 했습니다.
시작메뉴를 새로 만들면서 단축키도 지정합니다. 이 과정은 없어도 됩니다.

광고 메시지 받지 않으려면 _ad_temp_.ini 파일을 읽기전용으로 하면 된다고해서
_ad_temp_.ini 파일을 읽기전용으로 만드는 과정도 넣어봤습니다.

gom.reg 레지 파일은 마우스 오른쪽 버튼 메뉴 만들어주는거하고 옵션을 미리 레지에
등록해주기 위한 레지스트리 파일입니다. 없어도 됩니다.

위 세 파일을 WinRAR 를 이용하여 "자동풀림 압축파일 생성" 옵션에 체크 후 설명문에
[3] 의 설명문을 입력하여 압축합니다.
설명문에 TempMode 가 들어가면 임시폴더에 풀어 지정된 실행파일(gom.vbs)을 실행한다는
뜻인데, 임시폴더에 푸는거라서 지정된 폴더(Path=GomPlayer)는 별 의미가 없습니다.
묻지않고 실행(Silent=1)하고, 같은 파일이 있으면 덮어쓰라(Overwrite=1)는 뜻입니다.

압축된 실행파일을 더블클릭하면 자동 설치가 시작되며, on Error Resume Next 옵션
때문에 에러가 있더라도(ex, gom.reg 파일이 없더라도) 설치가 계속 진행됩니다.
연습이나 디버깅시에는 on Error Resume Next 과 Err.clear 줄 앞에 작은따옴표(')를 붙여줍니다.
GOMPLAYERSETUP.EXE 는 동일 폴더에 어차피 있게되므로 설치파일 존재여부 검사하는
If ~ then ~ end if 줄은 없어도 됩니다.
설치가 끝나면 임시폴더의 원본 파일들은 자동으로 삭제됩니다.