VBScript 简易安装程序框架
此脚本旨在成为一个轻量级、灵活的实用工具,以帮助部署软件包。
引言
此实用工具可用于向最终用户部署实用程序和补丁,或将应用程序打包以在 Windows 系统中使用。 此安装框架支持 Windows XP 中使用的所有环境变量,因此在考虑兼容性时应该易于编码。
背景
基本上,你只需包含要复制的文件的名称和位置,以及每个文件是链接还是注册;然后,剪切一些自定义处理代码。很简单。
使用代码
编辑此脚本
- 输入源文件的位置。
- 输入每个文件的目标路径。
- 决定是否要创建链接或热键。
- 决定是否需要注册文件。
- 输入任何必要的自定义过程(如果有)。
- 运行它!
'#######################
'# Installer Framework #
'# v.1.0 #
'# Brian Velde #
'# 2007-01-02 #
'#######################
Option Explicit
Dim sh, fso, dict 'CREATE SHELL, FILESYSTEMOBJ, AND DICTIONARY
Set sh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set dict = CreateObject("Scripting.Dictionary")
'# DEFINE PROGRAM INFORMATION #'
Dim strProgramName, strProgramMajorVersion, _
strProgramMinorVersion
Dim strProgramBuild, strProgramAuthor, _
strCreationDate, displayBuildNumber
strProgramName = "<program_name>"
strProgramMajorVersion = "v0"
strProgramMinorVersion = "1"
strProgramBuild = "1"
strProgramAuthor = "Brian Velde"
strCreationDate = "2007"
displayBuildNumber = False
'# END DEFINE PROGRAM INFORMATION #'
'# SETUP ENVIRONMENT VARIABLES #'
Dim evallusersprofile, evappdata, evcd, evcmdcmdline,
evcomputername, evcomspec, evdate 'ENVIRONMENT VARIABLES
Dim everrorlevel, evhomedrive, evhomepath, evhomeshare,
evlogonserver, evnumber_of_processors 'ENVIRONMENT VARIABLES
Dim evos, evpath, evpathext, evprocessor_architecture,
evprogramfiles, evprompt, evrandom 'ENVIRONMENT VARIABLES
Dim evsystemdrive, evsystemroot, evtemp, evtmp, evtime,
evuserdomain, evusername, evuserprofile, evwindir 'ENVIRONMENT VARIABLES
evallusersprofile = sh.ExpandEnvironmentStrings("%allusersprofile%")
evappdata = sh.ExpandEnvironmentStrings("%appdata%")
evcd = sh.ExpandEnvironmentStrings("%cd%")
evcmdcmdline = sh.ExpandEnvironmentStrings("%cmdcmdline%")
evcomputername = sh.ExpandEnvironmentStrings("%computername%")
evcomspec = sh.ExpandEnvironmentStrings("%comspec%")
evdate = sh.ExpandEnvironmentStrings("%date%")
everrorlevel = sh.ExpandEnvironmentStrings("%errorlevel%")
evhomedrive = sh.ExpandEnvironmentStrings("%homedrive%")
evhomepath = sh.ExpandEnvironmentStrings("%homepath%")
evhomeshare = sh.ExpandEnvironmentStrings("%homeshare%")
evlogonserver = sh.ExpandEnvironmentStrings("%logonserver%")
evnumber_of_processors = _
sh.ExpandEnvironmentStrings("%number_of_processors%")
evos = sh.ExpandEnvironmentStrings("%os%")
evpath = sh.ExpandEnvironmentStrings("%path%")
evpathext = sh.ExpandEnvironmentStrings("%pathext%")
evprocessor_architecture = _
sh.ExpandEnvironmentStrings("%processor_architecture%")
evprogramfiles = sh.ExpandEnvironmentStrings("%programfiles%")
evprompt = sh.ExpandEnvironmentStrings("%prompt%")
evrandom = sh.ExpandEnvironmentStrings("%random%")
evsystemdrive = sh.ExpandEnvironmentStrings("%systemdrive%")
evsystemroot = sh.ExpandEnvironmentStrings("%systemroot%")
evtemp = sh.ExpandEnvironmentStrings("%temp%")
evtmp = sh.ExpandEnvironmentStrings("%tmp%")
evtime = sh.ExpandEnvironmentStrings("%time%")
evuserdomain = sh.ExpandEnvironmentStrings("%userdomain%")
evusername = sh.ExpandEnvironmentStrings("%username%")
evuserprofile = sh.ExpandEnvironmentStrings("%userprofile%")
evwindir = sh.ExpandEnvironmentStrings("%windir%")
'# END SETUP ENVIRONMENT VARIABLES #'
'# DEFINE ENVIRONMENT INFORMATION #'
Dim installPath
Dim extraFolders(2)
'SET TO THE NEMBER OF EXTRA FOLDERS YOU NEED. (2 default)
installPath = "" 'PROGRAM INSTALL DIRECTORY.
extraFolders(0) = "" 'PATH TO FOLDER TO CREATE...
extraFolders(1) = "" 'PATH TO FOLDER TO CREATE...
'# END DEFINE ENVIRONMENT INFORMATION #'
'# DEFINE FILES TO BE COPIED #'
Dim fileSrc(10) 'CHANGE TO THE NUMBER OF FILES (min 10)
Dim fileDst(10) 'CHANGE TO THE NUMBER OF FILES (min 10)
Dim linkTarget(10) 'SAVE LINK TARGET
Dim linkLocation(10) 'SAVE OUTPUT LINK LOCATION
Dim regFile(10) 'REGISTER FILE AS LIBRARY (BOOL)
Dim hotKey(10) '"ALT+CTRL+F"
'###########################################################
'# YOU MUST INCLUDE FILENAME IN DST PATH!! #
'# ( evsystemdrive & "\<folder_name>\<file_name>.<ext>" ) #
'###########################################################
fileSrc(0) = "" 'COPY THIS FILE
fileDst(0) = "" 'TO THIS LOCATION
linkTarget(0) = fileDst(0) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(0) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(0) = False 'REGISTER FILE AS LIBRARY
hotKey(0) = "" '"ALT+CTRL+F"
fileSrc(1) = "" 'COPY THIS FILE
fileDst(1) = "" 'TO THIS LOCATION
linkTarget(1) = fileDst(1) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(1) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(1) = False 'REGISTER FILE AS LIBRARY
hotKey(1) = "" '"ALT+CTRL+F"
fileSrc(2) = "" 'COPY THIS FILE
fileDst(2) = "" 'TO THIS LOCATION
linkTarget(2) = fileDst(2) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(2) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(2) = False 'REGISTER FILE AS LIBRARY
hotKey(2) = "" '"ALT+CTRL+F"
fileSrc(3) = "" 'COPY THIS FILE
fileDst(3) = "" 'TO THIS LOCATION
linkTarget(3) = fileDst(3) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(3) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(3) = False 'REGISTER FILE AS LIBRARY
hotKey(3) = "" '"ALT+CTRL+F"
fileSrc(4) = "" 'COPY THIS FILE
fileDst(4) = "" 'TO THIS LOCATION
linkTarget(4) = fileDst(4) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(4) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(4) = False 'REGISTER FILE AS LIBRARY
hotKey(4) = "" '"ALT+CTRL+F"
fileSrc(5) = "" 'COPY THIS FILE
fileDst(5) = "" 'TO THIS LOCATION
linkTarget(5) = fileDst(5) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(5) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(5) = False 'REGISTER FILE AS LIBRARY
hotKey(5) = "" '"ALT+CTRL+F"
fileSrc(6) = "" 'COPY THIS FILE
fileDst(6) = "" 'TO THIS LOCATION
linkTarget(6) = fileDst(6) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(6) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(6) = False 'REGISTER FILE AS LIBRARY
hotKey(6) = "" '"ALT+CTRL+F"
fileSrc(7) = "" 'COPY THIS FILE
fileDst(7) = "" 'TO THIS LOCATION
linkTarget(7) = fileDst(7) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(7) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(7) = False 'REGISTER FILE AS LIBRARY
hotKey(7) = "" '"ALT+CTRL+F"
fileSrc(8) = "" 'COPY THIS FILE
fileDst(8) = "" 'TO THIS LOCATION\
linkTarget(8) = fileDst(8) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(8) = "" 'LOCATION OF OUTPUT LINK (blank = no link)
regFile(8) = False 'REGISTER FILE AS LIBRARY
hotKey(8) = "" '"ALT+CTRL+F"
fileSrc(9) = "" 'COPY THIS FILE
fileDst(9) = "" 'TO THIS LOCATION
linkTarget(9) = fileDst(9) 'SAVE LOCATION OF FILE FOR LINKING
linkLocation(9) = "" 'LOCATION OF OUTPUT LINK ("" = no link)
regFile(9) = False 'REGISTER FILE AS LIBRARY
hotKey(9) = "" '"ALT+CTRL+F"
'# END DEFINE FILES TO BE COPIED #'
'# BEGIN INSTALLER FUNCTIONS #'
Dim win98, win2k, winXP, win2k3, winVista 'getOsVer() (BOOLEAN)
Function getOsVer()
Dim SystemSet, system, osVer
Set SystemSet = _
GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
For each System in SystemSet
osVer = System.Caption
'# DETERMINE IF OS IS VISTA
If InStr(osVer, "Vista") Then
winVista = True
Else
winVista = False
End If
'# DETERMINE IF OS IS 2003
If InStr(osVer, "2003") Then
win2k3 = False
Else
win2k3 = True
End If
'# DETERMINE IF OS IS XP
If InStr(osVer, "XP") Then
winXP = True
Else
winXP = False
End If
'# DETERMINE IF OS IS 2000 PRO/SERVER
If InStr(osVer, "2000") Then
win2k = True
Else
win2k = False
End If
'# DETERMINE IF OS IS win98
If InStr(osVer, "98") Then
win98 = True
Else
win98 = False
End If
Next
End Function
Function createDirs()
Dim max, i
If Not fso.FolderExists(installPath) AND installPath <> "" Then
fso.CreateFolder(installPath)
End If
i=0
max = UBound(extraFolders)
While (i < max)
If Not fso.FolderExists(extraFolders(i)) And extraFolders(i) <> "" Then
fso.CreateFolder(extraFolders(i))
End If
i = i+1
Wend
End Function
Function copyFiles()
Dim i, max
i = 0
max = UBound(fileSrc)
While (i < max)
If (fileSrc(i) <> "") Then
fso.CopyFile fileSrc(i), fileDst(i), True
End If
i = i+1
Wend
End Function
Function createShortcuts()
Dim outputLink, oLink, i, max
i = 0
max = UBound(linkTarget)
While (i < max)
If (linkLocation(i) <> "") Then
outputLink = linkLocation(i)
Set oLink = sh.CreateShortcut(outputLink)
oLink.TargetPath = linkTarget(i)
' oLink.Arguments = ""
' oLink.Description = "MyProgram"
If hotKey(i) <> "" Then
oLink.HotKey = hotKey(i)
End If
oLink.IconLocation = linkTarget(i)
' oLink.WindowStyle = "1"
' oLink.WorkingDirectory = "C:\Program Files\MyApp"
oLink.Save
Set oLink = Nothing
End If
i = i+1
Wend
End Function
Function registerFiles()
Dim result, i, command
i=0
While (i < UBound(fileDst))
If regFile(i) <> False Then
command = """" & evsystemroot & _
"\system32\regsvr32.exe""" & _
" """ & fileDst(i) & """"
sh.Exec command
End If
i = i+1
Wend
End Function
Function cleanup()
Set sh = Nothing
Set fso = Nothing
Set dict = Nothing
End Function
'# END INSTALLER FUNCTIONS #'
'# PROMPT USER IF THEY WISH TO INSTALL #'
Dim installMsg, endMsg 'SETUP BEGIN AND END MESSAGES (OBJ)
If displayBuildNumber = True Then
installMsg = MsgBox("Do you wish to install " & strProgramName &_
" " & strProgramMajorVersion & _
"." & strProgramMinorVersion & _
" build " & strProgramBuild & _
"?",vbYesNo,"Install " _
& strProgramName & "?")
Else
installMsg = MsgBox("Do you wish to install " & _
strProgramName & " " & _
strProgramMajorVersion & "." & strProgramMinorVersion & _
"?",vbYesNo,"Install " & strProgramName & "?")
End If
If installMsg = vbNo Then
WScript.Quit(666)
End If
'# BEGIN INSTALL PROCEDURES #'
Call getOsVer()
Call createDirs()
Call copyFiles()
Call createShortcuts()
Call registerFiles()
'# BEGIN USER DEFINED INSTALL PROCEDURES #'
'# END USER DEFINED INSTALL PROCEDURES #'
Call cleanup()
'# END INSTALL PROCEDURES #'
'# DISPLAY FINISHED MESSAGE #'
endMsg = MsgBox("Installation of " & strProgramName & _
" " & strProgramMajorVersion & "." & _
strProgramMinorVersion & _
" has completed successfully!", vbOKOnly, "Finished!")
WScript.Quit(0)
关注点
这个脚本为我节省了很多时间……就这么多了……
历史
- 版本 1.1 - 上传日期 2007-5-24。