一個使用web安裝盤的install(nextinstaller)vbs腳本

'//////////////////////////////////////////////////////////////////////////////
'                                                                           
'  IIIIIII    A                                                           
'    II      A A                        InstallAide (R)                 
'    II     A   A      (c) 2000-2005, InstallAide Software
'    II     AAAAA      Amethyst  
'  IIIIIII AA   AA                       
'                                                                                                                                                  '
'//////////////////////////////////////////////////////////////////////////////
Dim  BACKSTEP
Dim  NEXTSTEP
Dim  EXITSTEP
Dim  strStep
Dim  IAParam
Dim  strTemp
Dim  strSetupImage
Dim  strSupportDir
Dim  nState
Dim  strTargetDir
Public strWebSite
Public szGlobalPath
Public szExepath
Public szGlobal
Public g_szAMDBSvr,g_szAMSvr,g_szAMDB,g_szAMPort
Public g_szAPMDB,g_szAPMSvr
Public g_szDbUser
Public g_szDbUserPsw
Public g_szAPMSite
Public g_ErrorCode
Public g_ErrorInfo

BACKSTEP  = 1
NEXTSTEP  = 2
EXITSTEP  = 3

SM_MODIFY = 1
SM_RESTORE  = 2
SM_REMOVE = 3

Set IAParam  = Install.CreateIAParam()

WriteConfig()

If Install.IsInstalled() Then
 OnModify
Else
 OnInstall
End If 

Set IAParam = Nothing

'--------------------------------------------
' 修改安裝
'--------------------------------------------
Sub OnModify()
 strStep   = "SetModifyType"
 Do While strStep <> "Exit"
  Select Case strStep
   Case "SetModifyType" 
    nState = Install.SdModifySetup( IAParam )
    If nState = NEXTSTEP Then
     If Install.SetupMode = SM_MODIFY Then
      strStep = "SdComponent"
     ElseIf Install.SetupMode = SM_RESTORE Then
      strStep = "SdCopyFile"
     ElseIf Install.SetupMode = SM_REMOVE Then
      Install.UnInstall
      strStep = "Exit"
     Else
      strStep = "Exit"
     End If
    Else
     strStep = "Exit"
    End If
    
   Case "SdComponent"
       nState = Install.SdComponent( IAParam )
    If nState = BACKSTEP Then
     strStep = "SetModifyType"
    ElseIf nState = NEXTSTEP Then
     strStep = "SdCopyFile"
    Else
     strStep = "Exit"
    End If
    
   Case "SdCopyFile" 
       nState = Install.SdCopyFile( IAParam )
    If nState = BACKSTEP Then
     If Install.SetupTypeName = "_Custom" Then
      strStep = "SdComponent"
     Else
      strStep = "SdSetupType"
     End If
    Else
     strStep = "SdFinish"
    End If
       
      Case "SdFinish" 
       Install.SdFinish( IAParam )
    strStep = "Exit"
    
     Case Else
         strStep = "Exit"
  End Select
 Loop 
End Sub
 
 
'--------------------------------------------
' 安裝系統
'--------------------------------------------
Sub OnInstall()
 strStep   = "SdWelCom"

 Do While strStep <> "Exit"
  Select Case strStep
  
   Case "SdWelCom"
    nState = Install.SdWelcome(IAParam)
    If nState = BACKSTEP Then
     strStep = "SdWelCom"
    ElseIf nState = NEXTSTEP Then
     strStep = "SdLicense"
    Else
     strStep = "Exit"
    End If
      
      Case "SdLicense" 
       nState = Install.SdLicense(IAParam)
    If nState = BACKSTEP Then
     strStep = "SdWelCom"
    ElseIf nState = NEXTSTEP Then
     strStep = "SdSetDestPath"
    Else
     strStep = "Exit"
    End If
       
      Case "SdSetDestPath"
       nState = Install.SdSetDestPath(IAParam)
    If nState = BACKSTEP Then
     strStep = "SdLicense"
    ElseIf nState= NEXTSTEP Then
     strStep = "SetAMDB"
    Else
     strStep = "Exit"
    End If
    
   Case "SetAMDB"
      IAParam.SetPrompt "設置ActiveMessenger信息"
    IAParam.SetItemCount 4
    IAParam.SetItemPrompt 1, "am數據庫服務:"
    IAParam.SetItemData 1 , g_szAMDBSvr
    IAParam.SetItemPrompt 2, "am數據庫名稱:"
    IAParam.SetItemData 2 , g_szAMDB
    IAParam.SetItemPrompt 3, "am服務器端口"
    IAParam.SetItemData 3 , g_szAMSvr
    IAParam.SetItemPrompt 4, "am服務器:"
    IAParam.SetItemData 4 , g_szAMPort
    
    nState = Install.SdEdit(IAParam)
    g_szAMDBSvr =  IAParam.GetItemData(1)
    g_szAMDB =  IAParam.GetItemData(2)
    g_szAMSvr =  IAParam.GetItemData(3)
    g_szAMPort =  IAParam.GetItemData(4)
    
    If nState = BACKSTEP Then
     strStep = "SdSetDestPath"
    ElseIf nState= NEXTSTEP Then
     strStep = "SetAPMdb"
    Else
     strStep = "SdFinish"
    End If
    
   Case "SetAPMdb"
       IAParam.SetPrompt "設置apm信息"
    IAParam.SetItemCount 3
    IAParam.SetItemPrompt 1, "APM數據庫服務:"
    IAParam.SetItemData 1 , g_szAPMSvr
    IAParam.SetItemPrompt 2, "APM數據庫名稱:"
    IAParam.SetItemData 2 , g_szAPMDB

    nState = Install.SdEdit(IAParam)
    If nState = BACKSTEP Then
     strStep = "SdSetDestPath"
    ElseIf nState= NEXTSTEP Then
     strStep = "SetWebSite"
    Else
     strStep = "SdFinish"
    End If
    
   Case "SetWebSite"
    IAParam.SetPrompt "設置站點名稱"
    IAParam.SetItemCount 1
    IAParam.SetItemPrompt 1, "站點:"
    IAParam.SetItemData 1 , "APM"
   
    nState = Install.SdEdit(IAParam)
    If nState = BACKSTEP Then
     strStep = "SetAPMdb"
    ElseIf nState= NEXTSTEP Then
     strStep = "SdCopyFile"
    Else
     strStep = "SdFinish"
    End If
    
    strWebSite =  IAParam.GetItemData(1)
    StartServer()
    g_szAPMSite = strWebSite 
    
    strOSName = CommObj.GetCurOSName()
    If strOSName  = "Windows2003" Then
     SetIISInfo
    End If
    
     ValidateWebSite strWebSite, "1"
     If g_ErrorCode = 0 Then
      szErrInfo= "安裝程序發現站點 " + g_szAPMSite + " 已存在,若直接覆蓋點擊‘確定’,若要重新命名站點,點擊‘取消’按鈕!"
      nReturn = MsgBox( szErrInfo , 1+48+256, "確認覆蓋" )
      If nReturn = 1 Then
       DeleteWebSite  g_szAPMSite,"1"
      Else
       strStep = "SetWebSite"
     End If
     End If
    
   Case "SdCopyFile" 
       nState = Install.SdCopyFile( IAParam )
    If nState = BACKSTEP Then
     strStep = "SetWebSite"
    ElseIf nState= NEXTSTEP Then
     strStep = "SetVirtualDir"
    Else
     strStep = "SdFinish"
    End If
  
       
      Case "SetVirtualDir" 
       IAParam.SetPrompt "Creating WirtualDir ..."
       IAParam.SetAttrib "ShowDialog" , "TRUE"
       Install.SdWaiting IAParam
       
       MakeWebSite strWebSite
       If g_ErrorCode <> 0 Then
        Install.SetSetupError 1
       End If
       
       IAParam.SetAttrib "ShowDialog" , "FALSE"
       Install.SdWaiting IAParam
    strStep = "SdFinish"
    
      Case "SdFinish" 
       Install.SdFinish IAParam
    strStep = "Exit"
    
     Case Else
         strStep = "Exit"
  End Select
 Loop
End Sub 


'//////////////////////////////////////////////////////////////////////////////
'
' Fuction List
'
'//////////////////////////////////////////////////////////////////////////////

Function MakeWebSite( strWebSite )
 sSitePath = Install.GetPath( "PATH_S_TARGETDIR" )
 CreateWebSite strWebSite, "1", sSitePath
 If g_ErrorCode <> 0 Then
  msgbox g_ErrorInfo
  Exit Function
 End If
                                   
  szWebPath = "IIS://localHost/W3Svc/1/Root/" + g_szAPMSite
 SetDefaultDoc szWebPath, "Login.aspx"
  If g_ErrorCode <> 0 Then
  msgbox g_ErrorInfo
  Exit Function
 End If
   
 CreateApp szWebPath, g_szAPMSite
    If g_ErrorCode <> 0 Then
  msgbox g_ErrorInfo
  Exit Function
 End If
   
    WriteConfig
End Function
 
Function WriteConfig()
 szGlobalPath = Install.GetPath("PATH_S_TARGETDIR") + "/Web.config"
' szExepath = Install.GetPath("PATH_S_SUPPORTDIR") + "/RpFileString.exe"
'   szGlobal="/"+szGlobalPath+",<<APMDB>>="+g_szAPMDB+",<<APMSVR>>="+g_szAPMSvr+",<<AMDBSVR>>="+g_szAMDBSvr+",<<AMSVR>>="+g_szAMSvr+",<<AMDB>>="+g_szAMDB
'    szGlobal = szGlobal+",<<AMDBUSER>>="+g_szDbUser+",<<AMDBUSERPSW>>="+g_szDbUserPsw+",<<AMPORT>>="+g_szAMPort+",<<AMLOGIN>>="+g_szLogin+",<<AMLOGINPSW>>="+g_szLoginPsw+"/"
   
 CommObj.ReplaceTextFileData szGlobalPath , "<<APMDB>>" , g_szAPMDB
 CommObj.ReplaceTextFileData szGlobalPath , "<<APMSVR>>" , g_szAPMSvr
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMDBSVR>>" , g_szAMDBSvr
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMSVR>>" , g_szAMSvr
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMDB>>" , g_szAMDB
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMDBUSER>>" , g_szDbUser
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMDBUSERPSW>>" , g_szDbUserPsw
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMPORT>>" , g_szAMPort
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMLOGIN>>" , g_szLogin
 CommObj.ReplaceTextFileData szGlobalPath , "<<AMLOGINPSW>>" , g_szLoginPsw
 
'  Exit Function
'   nResult=Install.ShellExec( szExepath,szGlobal,1,"")
'     If nResult < 0 Then
'      Msgbox "設置站點文件 Web.config 時出錯!"
'      return -1
'     End If
End Function


Function DeleteWebSite(sSiteName, sWebSiteIndex)
    On Error Resume Next
    Dim webSite, vRoot, vDir
   
    Set webSite = GetObject("IIS://LocalHost/W3svc/" & sWebSiteIndex)
    If Err.Number <> 0 Then
        SetErrInfo 1, "站點IIS://LocalhOST/W3SVC/" & sWebSiteIndex & "可能不存在。"
        Err.Clear
        Exit Function
    End If
   
    Set vDir = GetObject("IIS://LocalHost/W3svc/" & sWebSiteIndex & "/Root/" & sSiteName)
    If Err.Number <> 0 Then
        SetErrInfo 3, "目錄Del IIS://LocalHost/W3svc/" & sWebSiteIndex & "/Root/" & sSiteName & "不存在"
        Err.Clear
        Exit Function
    End If
   
    Set vRoot = GetObject("IIS://LocalHost/W3svc/" & sWebSiteIndex & "/Root")
    If Err.Number <> 0 Then
        SetErrInfo 1, "站點IIS://LocalhOST/W3SVC/" & sWebSiteIndex & "可能不存在。"
        Err.Clear
        Exit Function
    End If
       
    vRoot.Delete "IIsWebVirtualDir", sSiteName
    If Err.Number <> 0 Then
        SetErrInfo 5, "刪除虛擬目錄時出錯"
        Err.Clear
        Exit Function
    End If
   
    SetErrInfo 0, "刪除虛擬目錄成功"
End Function

'====================================================================
'這個函數在Web站點上創建一個虛擬目錄,把虛擬目錄的權限設爲默認可讀取、不可寫、
'目錄不可覽、可執行腳本、不可執行程序。
'====================================================================
Function CreateWebSite(sSiteName, sWebSiteIndex, sSitePath)
    On Error Resume Next
    Dim webSite, vRoot, vDir
   
    If sSitePath = "" Then
        SetErrInfo 100, "參數 sSitePath 錯誤"
  Exit Function
    End If
       
    'Set error infomation first
    SetErrInfo 0, "程序發生了一個不明錯誤。"

    Set webSite = GetObject("IIS://localhost/W3svc/" & sWebSiteIndex)
    If Err.Number <> 0 Then
  SetErrInfo 1, "站點IIS://LocalhOST/W3SVC/" & sWebSiteIndex & "可能不存在。"
     Err.Clear
     Exit Function
    End If

    Set vDir = GetObject("IIS://Localhost/W3SVC/" & sWebSiteIndex & "/Root/" & sSiteName)
    If Err.Number <> 0 Then   'the site doesnt exist, so create it.
                Err.Clear
        Set vRoot = webSite.GetObject("IIsWebVirtualDir", "Root")
        Set vDir = vRoot.Create("IIsWebVirtualDir", sSiteName)
        If Err.Number <> 0 Then
            SetErrInfo 2, "創建虛擬目錄時出錯:" & sSiteName
            Err.Clear
            Exit Function
        End If
    End If
    vDir.Path = sSitePath
    vDir.AccessRead = True
    vDir.EnableDirBrowsing = False
    vDir.AccessExecute = False
    vDir.AccessWrite = False
    vDir.AccessScript = True
    vDir.SetInfo
   
    SetErrInfo 0, "創建站點成功"
End Function

Function SetWebSitePath(sWebPath, sPath)
    On Error Resume Next
    Dim webSite, vDir
   
    Set vDir = GetObject(sWebPath)
    If Err.Number <> 0 Then 'The site doesnt exist.
        SetErrInfo 2, "站點" & sWebPath & "不存在"
        Err.Clear
        Exit Function
    End If
    vDir.Path = sPath
    vDir.SetInfo
   
    SetErrInfo 0, "設置站點目錄成功"
End Function

Function SetProperty(sWebPath, sPropertyName, sProperValue)
    On Error Resume Next
    Dim vDir
    GetWebDirectory sWebPath, vDir
    vDir.Put sPropertyName, sProperValue
    vDir.SetInfo
    If Err.Number <> 0 Then
        SetErrInfo 3, "目錄Pro" & sWebPath & "不存在"
        Err.Clear
        Exit Function
    End If
   
    SetErrInfo 0, "屬性設置成功"
End Function

Function SetDefaultDoc(sWebPath, sDocName)
    On Error Resume Next
    Dim vDir
    GetWebDirectory sWebPath, vDir
    vDir.Put "EnableDefaultDoc", True
    vDir.Put "DefaultDoc", sDocName
    vDir.SetInfo
    If Err.Number <> 0 Then
        SetErrInfo 3, "目錄Doc" & sWebPath & "不存在"
        Exit Function
    End If
   
    SetErrInfo 0, "設置默認文檔成功"
End Function

Function CreateApp(sWebPath, sAppName)
    On Error Resume Next
    Dim vDir, oParentNode
    GetWebDirectory sWebPath, vDir
   
    vDir.AppCreate True
    If Err.Number <> 0 Then
        SetErrInfo 4, "創建Web應用程序時出錯。"
        Exit Function
    End If
   
    vDir.AppFriendlyName = sAppName
    vDir.SetInfo
   
    SetErrInfo 0, "創建應用程序成功"
End Function


Sub SetErrInfo(nResult, sDesc)
    g_ErrorCode = nResult
    g_ErrorInfo = sDesc
End Sub

Function ValidateWebSite(sSiteName, sWebSiteIndex)
    On Error Resume Next
    Dim webSite, vDir
   
    Set webSite = GetObject("IIS://localhost/W3svc/" & sWebSiteIndex)
    If Err.Number <> 0 Then
  SetErrInfo 1 , "站點IIS://LocalhOST/W3SVC/" & sWebSiteIndex & "可能不存在。"
  ValidateWebSite = 1
  Exit Function
    End If
   
    Set vDir = GetObject("IIS://Localhost/W3SVC/" & sWebSiteIndex & "/Root/" & sSiteName)
    If Err.Number <> 0 Then   'the site doesnt exist, so create it.
        Err.Clear
        SetErrInfo 3, "虛擬目錄:" & sSiteName & "不存在"
        ValidateWebSite = 3
        Exit Function
    End If

    SetErrInfo 0, ""
    ValidateWebSite = 0
End Function

Function GetWebDirectory(sWebPath, oDir)
    On Error Resume Next
    Dim nIdx, oNewNode
    If Len(sWebPath) <= 28 Then
        Set oDir = Nothing
        Exit Function
    End If
    Set oDir = GetObject(sWebPath)
    If Err.Number <> 0 Then
        Dim sParentPath, sBoyDir
        Err.Clear
        nIdx = InStrRev(sWebPath, "/")
        sParentPath = Left(sWebPath, nIdx - 1)
        sBoyDir = Mid(sWebPath, nIdx + 1)
        GetWebDirectory sParentPath, oNewNode
        Set oDir = oNewNode.Create("IIsWebDirectory", sBoyDir)
        If Err.Number <> 0 Then
            Set oDir = Norhing
        End If
    End If
End Function

Function SetIISInfo()
 Dim IIsWebServiceObj
 Set IIsWebServiceObj = GetObject("IIS://localhost/W3SVC")
 IIsWebServiceObj.EnableWebServiceExtension "ASP"
 IIsWebServiceObj.EnableWebServiceExtension "SSINC"
 IIsWebServiceObj.EnableWebServiceExtension "HTTPODBC"
 IIsWebServiceObj.EnableWebServiceExtension "WEBDAV"
 IIsWebServiceObj.EnableExtensionFile "*.exe"
 IIsWebServiceObj.AspEnableParentPaths = 1   'Enable parent paths
 IIsWebServiceObj.EnableWebServiceExtension "ASP.NET v1.1.4322"
 IIsWebServiceObj.SetInfo
 Set IIsWebServiceObj = nothing
End Function

'====================================================
' Start IIS Server
'====================================================
Private Function StartServer()
 Dim Fullpath,oServer
 Fullpath= "IIS://LocalHost/W3SVC/1"
 Set oServer = GetObject(fullpath)
 oServer.Start
 Set oServer = nothing
End Function
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章