Установка LiteManager Server с помощью VBS скрипта.

Вопросы, связанные с эксплуатацией, тестированием и лицензированием LiteManager - программы удаленного управления и администрирования компьютеров.

Установка LiteManager Server с помощью VBS скрипта.

Сообщение Gamber » 17 окт 2014, 10:43

Собственно раз уж зашел, напишу.
Возникла необходимость, не мешая пользователям расставить сервер на множество рабочих мест, например с помощью GPO или PsExec.
Для этого, предложенный на сайте bat был чуть-чуть доработан.

Код: Выделить всё
Option Explicit

'Prevent error message
On Error Resume Next

'Set var and const
Dim PFEV, RestoreSet, LMDir, LMSDirObj, LMSClientFileVerObj, LMSServerFileVerObj, LMSClientFileVer, LMSServerFileVer, LMSServerCurVer, LMSClientCurVer, LMSRestartService, LMSConfigFile, LMSDistrib, LMSDistribArc, LMSDistribArcDestFolder, LMSDistribArcSrc, LMSDistribArcFile, LMSInstall, LMSDir, LMSFileServiceObj, LMSUninstall, SubfoldersCount, CountFiles, subfolder, file, StopLMService, ServiceExists, strComputer, objWMIService, colRunningServices, nItems
Set PFEV = CreateObject("WScript.Shell")
Set StopLMService = CreateObject("WScript.Shell")
LMDir = PFEV.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\LMServer\"
Const DisDir = ""
Const DisName = "LMServer_compact.zip"

'Restore settings mode
RestoreSet = false

'Set overwrite files mode
Const OverwriteExisting = True

Set LMSDirObj = CreateObject("Scripting.FileSystemObject")
Call CheckLMService
If Not LMSDirObj.FolderExists(LMDir) Then
   
   'Create LMS work directory   
   LMSDirObj.CreateFolder(LMDir)
   Call Install_LMS

'Incomplete installation (need re-install)

ElseIf LMSDirObj.GetFolder(LMDir).Files.Count < 8 Or ServiceExists = 0 Then
   Call Uninstall_LMS
   Call Install_LMS
ElseIf RestoreSet = true Then
   Call Restore_settings
End If

'Old version (need upgrade)
Set LMSClientFileVerObj = CreateObject("Scripting.FileSystemObject")
Set LMSServerFileVerObj = CreateObject("Scripting.FileSystemObject")

If (LMSClientFileVerObj.FileExists(LMDir & "Curver.dat")) AND (LMSServerFileVerObj.FileExists(DisDir & "Curver.dat")) Then
   Set LMSClientFileVer = LMSClientFileVerObj.OpenTextFile(LMDir & "Curver.dat", 1)
   LMSClientCurVer = LMSClientFileVer.ReadLine
   LMSClientFileVer.Close
   Set LMSServerFileVer = LMSServerFileVerObj.OpenTextFile(DisDir & "Curver.dat", 1)
   LMSServerCurVer = LMSServerFileVer.ReadLine
   LMSServerFileVer.Close

   If LMSClientCurVer <> LMSServerCurVer Then
      Call Uninstall_LMS
      Call Install_LMS
   End If
End If

'Safety closing
If Err.Number <> 0 Then
   WScript.Quit Err.Number
End If

Sub CheckLMService()
   'Prevent error message
   On Error Resume Next
   
   strComputer = "."
   Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
   Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='ROMService'") 
   nItems = colRunningServices.Count 
   If nItems > 0  Then
      ServiceExists = 1
   Else
      ServiceExists = 0
   End If
End Sub

Sub Restore_settings()
   'Prevent error message
   On Error Resume Next

   'Restore config file and restart LMS service
   Set LMSRestartService = CreateObject("WScript.Shell")
   Set LMSConfigFile = CreateObject("Scripting.FileSystemObject")
   StopLMService.Run "net stop ROMService",0,true
   LMSConfigFile.CopyFile DisDir & "Config.xml", LMDir, OverwriteExisting
   LMSRestartService.Run """" & LMDir & "ROMServer.exe" & """" & " /compact",,true
   
   'Safety closing
   If Err.Number <> 0 Then
      WScript.Quit Err.Number
   End If
End Sub

Sub Install_LMS()
   'Prevent error message
   On Error Resume Next
   
   'Copy distrib LMS to user computer
   Set LMSDistrib = CreateObject("Scripting.FileSystemObject")
   LMSDistrib.CopyFile DisDir & DisName, LMDir, OverwriteExisting
   LMSDistrib.CopyFile DisDir & "Curver.dat", LMDir, OverwriteExisting
   LMSDistrib.CopyFile DisDir & "Config.xml", LMDir, OverwriteExisting
   
   'Extracting archive with LMS distrib
   Set LMSDistribArc = CreateObject("Shell.Application")
   Set LMSDistribArcDestFolder = LMSDistribArc.NameSpace(LMDir)
   Set LMSDistribArcSrc = LMSDistribArc.NameSpace(LMDir & DisName)
   LMSDistribArcDestFolder.CopyHere LMSDistribArcSrc.Items,4
   Set LMSDistribArcFile = CreateObject("Scripting.FileSystemObject")
   LMSDistribArcFile.DeleteFile(LMDir & DisName)

   'Install and run LMS
   Set LMSInstall = CreateObject("WScript.Shell")
   LMSInstall.Run """" & LMDir & "ROMServer.exe" & """" & " /silentinstall",,true
   LMSInstall.Run """" & LMDir & "ROMServer.exe" & """" & " /firewall",,true
   LMSInstall.Run """" & LMDir & "ROMServer.exe" & """" & " /compact",,true
   
   'Prevent incomplete installation
   If Err.Number <> 0 Then
      Call Uninstall_LMS
      WScript.Quit Err.Number
   End If
End Sub

Sub Uninstall_LMS()
   'Prevent error message
   On Error Resume Next
   
   Set LMSDir = LMSDirObj.GetFolder(LMDir)
   
   'Stop and uninstall LMS Windows service
   StopLMService.Run "net stop ROMService",0,true
   Set LMSFileServiceObj = CreateObject("Scripting.FileSystemObject")
   If LMSFileServiceObj.FileExists(LMDir & "ROMServer.exe") Then
      Set LMSUninstall = CreateObject("WScript.Shell")
      LMSUninstall.Run """" & LMDir & "ROMServer.exe" & """" & " /silentuninstall",,true
   End If

   'Clear LMS work directory
   Set SubfoldersCount = LMSDir.Subfolders
   For Each subfolder in SubfoldersCount
      subfolder.Delete(true)
   Next
   Set CountFiles = LMSDir.Files
   For Each file in CountFiles
      file.Delete(true)
   Next
   
   'Safety closing
   If Err.Number <> 0 Then
      WScript.Quit Err.Number
   End If
End Sub

WScript.Quit 0


Чего удалось достичь:
- Доставка до клиента в максимально компактном виде (на клиента закидывается zip архив, весом чуть более 3 МБ (версия 4602), отдельно копируются файлы Curver.dat и Config.xml хранящиеся рядом с архивом)
- Тихая скрытная установка с нужными параметрами
- Максимальная чистота в списке программ и реестре (приложение инсталлируется простым копированием файлов, работает в компактном режиме, все настройки в xml файле)
- Встроенное автообновление сервера (в файле Curver.dat записан номер версии, отличие файла на клиенте и сервере запускает процедуру обновления)
- Возможность автоматического восстановления настроек, после их несанкционированного изменения (перезапись файла Config.xml копией с сервера)
- Восстановление сервера по причине случайного или преднамеренного удаления файлов.

Скрипт для полной деинсталляции:

Код: Выделить всё
Option Explicit

'Prevent error message
On Error Resume Next

'Set var and const
Dim PFEV, LMDir, LMSDir, LMSDirObj, LMSFileServiceObj, LMSUninstall, SubfoldersCount, CountFiles, subfolder, file
Set PFEV = CreateObject("WScript.Shell")
LMDir = PFEV.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\LMServer\"

'Check LMS installation
Set LMSDirObj = CreateObject("Scripting.FileSystemObject")
Set LMSDir = LMSDirObj.GetFolder(LMDir)

If LMSDirObj.FolderExists(LMDir) Then
   Uninstall_LMS()
End If

'Safety closing
If Err.Number <> 0 Then
   WScript.Quit Err.Number
End If

Sub Uninstall_LMS()
   
   'Prevent error message
   On Error Resume Next
   
   'Stop and uninstall LMS Windows service
   Set LMSFileServiceObj = CreateObject("Scripting.FileSystemObject")
   If LMSFileServiceObj.FileExists(LMDir & "ROMServer.exe") Then
      Set LMSUninstall = CreateObject("WScript.Shell")
      LMSUninstall.Run """" & LMDir & "ROMServer.exe" & """" & " /stop",,true
      LMSUninstall.Run """" & LMDir & "ROMServer.exe" & """" & " /silentuninstall",,true
   End If
   
   'Clear and delete LMS work directory
   Set SubfoldersCount = LMSDir.Subfolders
   For Each subfolder in SubfoldersCount
      subfolder.Delete(true)
   Next
   Set CountFiles = LMSDir.Files
   For Each file in CountFiles
      file.Delete(true)
   Next
   LMSDir.Delete   
      
   'Safety closing
   If Err.Number <> 0 Then
      WScript.Quit Err.Number
   End If
End Sub

WScript.Quit 0
Gamber
 
Сообщения: 15
Зарегистрирован: 07 окт 2014, 20:37

Вернуться в LiteManager: Техническая поддержка, тестирование, неполадки и другие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4