Software via GPO no Logon de Usuário - SAMBA e AD

Publicado por Ricardo Xerfan (última atualização em 13/12/2018)

[ Hits: 3.626 ]

Download script-final-deinstall-install-envio.vbs




VBScript para desinstalar e instalar software via GPO no logon de usuário - SAMBA e AD.

  



Esconder código-fonte

'---------------------------------------------------
' ESTE SCRIPT UTILIZA "EM PARTE" OS SCRIPTS:
' Process.vbs - v1.4 E ProcessKillLocal.vbs - v2.7
' DO AUTOR Guy Thomas (https://computerperformance.co.uk/)
' NO ENTANTO SUA MAIOR COMPOSICAO FOI DESENVOLVIDA POR
' RICARDO XERFAN, SENDO OS DOIS SCRIPTS CITADOS ACIMA,
' UTILIZADOS EM ROTINAS ESPECIFICAS PARA DESCOBRIR OS
' PROCESSOS EM EXECUCAO E FINALIZACAO DOS MESMOS.
' CONTUDO, ALGUMAS CARACTERISTICAS DOS SCRIPTS CITADOS
' FORAM MODIFICADAS PARA MELHOR ENCAIXE COM AS ROTINAS
' DO SCRIPT COMO UM TODO, COM A FINALIDADE DE DESINSTALAR
' E INSTALAR UM SOFTWARE VIA GPO NO LOGON DE USUARIO.
' OBS.: EM ALGUMAS PARTES DO SCRIPT, VC VERA QUE TEM ALGO
' RELACIONADO AO SOFTWARE "Spark", ISSO SE DEVE AO FATO
' DE TER SIDO ORIGINALMENTE DESENVOLVIDO COM A FINALIDADE
' DE DESINSTALAR E INSTALAR UNICAMENTE O MESMO. MAS, O
' SCRIPT FOI GENERALIZADO PARA DESINSTALAR E INSTALAR OUTROS
' SOFTWARES. BASTANDO PARA ISSO ALTERAR O CONTEUDO DAS VARIAVEIS.
' PODE UTILIZAR A VONTADE, NAO ESQUECA DE MODIFICAR AS
' VARIAVEIS CONFORME SUA NECESSIDADE.
' GRACAS A DEUS, TUDO CERTO!
' MACAPA - AP 31.10.2018
'---------------------------------------------------
'---------------------------------------------------
' O QUE ESSE SCRIPT FAZ?
' DE FORMA RESUMIDA:
' PRIMEIRO: VERIFICA SE EXISTE O ARQUIVO ZIP QUE FOI GERADO POR ELE.
'         CASO EXISTA, ELE NAO FAZ MAIS NADA E SAI. CASO NAO EXISTA,
' SEGUNDO:  VERIFICA SE EXISTE O DIRETORIO DE LOGs PARA DESINSTALACAO
'         DO PROGRAMA. CASO EXISTA, GERA LOG E PROSSEGUE PARA VERIFICACAO
'         SE EXISTE O DIRETORIO DO SOFTWARE x64. CASO NAO EXISTA O DIRETORIO
'         DE LOGs, ELE CRIA O MESMO, GERA LOG E PROSSEGUE PARA VERIFICACAO
'          SE EXISTE O DIRETORIO DO SOFTWARE x64.
' TERCEIRO: VERIFICA SE EXISTE O DIRETORIO DO SOFTWARE x64. CASO EXISTA, GERA
'         LOG E PROSSEGUE PARA A VERIFICACAO DO ARQUIVO DE PARAMETRO DE
'         DESINSTALACAO (QUINTO). CASO NAO EXISTA, GERA LOG E VERIFICA SE EXISTE O
'         DIRETORIO DO SOFTWARE x86.
' QUARTO:   VERIFICA SE EXISTE O DIRETORIO DO SOFTWARE x86. CASO EXISTA, GERA
'         LOG E PROSSEGUE PARA A VERIFICACAO DO ARQUIVO DE PARAMETRO DE
'         DESINSTALACAO (QUINTO). CASO NAO EXISTA, GERA LOG E PROSSEGUE PARA A INSTALACAO
'         DO SOFTWARE ESPECIFICADO (NONO).
' QUINTO:   VERIFICA SE EXISTE O ARQUIVO QUE FOI GERADO COMO PARAMETRO PARA
'         DESINSTALACAO. CASO EXISTA, GERA LOG E PROSSEGUE PARA VERIFICACAO
'         DO ARQUIVO DE PARAMETRO DE INSTALACAO (SEXTO). CASO NAO EXISTA, EXIBE MENSAGEM
'         AO USUARIO E PROSSEGUE PARA VERIFICACAO DO SISTEMA ANTES DA DESINSTALACAO (SETIMO).
' SEXTO:   VERIFICA SE EXISTE O ARQUIVO QUE FOI GERADO COMO PARAMETRO PARA INSTALACAO.
'         CASO EXISTA, GERA LOG, COMPACTA O DIRETORIO DE LOGS (DECIMO), ENVIA AO SERVIDOR, EXIBE
'         MENSAGEM AO USUARIO E SAI. CASO NAO EXISTA, PROSSEGUE PARA A INSTALACAO
'         DO SOFTWARE ESPECIFICADO (NONO).
' SETIMO:   VERIFICA OS SOFTWARES QUE ESTAO INSTALADOS NO HOST, OS PROCESSOS QUE ESTAO
'         SENDO EXECUTADOS NO MESMO, GERA LOG E PROSSEGUE PARA DESINSTALACAO DO SOFTWARE (OITAVO).
' OITAVO:   VERIFICA SE EXISTE O DIRETORIO DO SOFTWARE x64 OU x86. CASO EXISTA, VERIFICA
'         SE EXISTE O EXECUTAVEL DO MESMO. CASO EXISTA, VERIFICA SE EXISTE O PROCESSO DO
'         MESMO EM EXECUCAO. CASO EXISTA, FINALIZA O PROCESSO E TENTA DESINSTALAR O SOFTWARE,
'         CASO NAO APRESENTE ERRO NA DESINSTALACAO, GERA LOG CONTENDO NOVA VERIFICACAO (SETIMO)
'         E REINICIA O HOST. CASO   APRESENTE ERRO NA DESINSTALACAO, GERA LOG E SAI. CASO EXISTA O
'         DIRETORIO x64 OU x86, MAS NAO EXISTA O ARQUIVO EXECUTAVEL, ELE GERA LOG, TENTA REMOVER O
'         DIRETORIO, CASO NAO CONSIGA REMOVER, APRESENTA ERRO E SAI. CASO CONSIGA REMOVER,
'         GERA LOG E SAI.
' NONO:      EXIBE MENSAGEM AO USUARIO, TENTA INSTALAR O SOFTWARE. CASO NAO APRESENTE ERRO
'         NA INSTALACAO, VERIFICA OS SOFTWARES INSTALADOS E PROCESSOS CORRENTES, GERA LOG
'         E SAI. CASO APRESENTE ERRO NA INSTALACAO, GERA LOG E SAI.
' DECIMO:    COMPACTA O DIRETORIO DE LOGs E ENVIA AO DIRETORIO REMOTO.
'---------------------------------------------------
'---------------------------------------------------
'---------------------------------------------------
'---------------------------------------------------
'DESCOMENTAR A LINHA ABAIXO SOMENTE SE QUISER QUE O SCRIPT NAO PARE CASO ACONTECA ALGUM ERRO.
'On Error Resume Next 

'===================================================
' DECLARACAO DE VARIAVEIS
'===================================================
Option Explicit
DIM fso, _
   wshShellx64, _
   wshShellx86, _
   x86, _
   x64, _
   CmdShell, _
   UndMaster, _
   CompName, _
   DirLog, _
   DirCompactLog, _
   DirDestinoLog, _
   DirSourceEXE, _
   TreeProgram, _
   TreeProgramEXE, _
   APDeinstall, _
   APInstall, _
   UName, _
   DInfo, _
   HInfo, _
   objFSOlogDirSparkexiste, _
   objFilelogDirSparkexiste, _
   outFilelogDirSparkexiste, _
   objFSOlogDirSparkcriado, _
   objFilelogDirSparkcriado, _
   outFilelogDirSparkcriado, _
   caminhoprogramax64, _
   objFSOlogDirProgramRaizx64, _
   objFilelogDirProgramRaizx64, _
   outFilelogDirProgramRaizx64, _
   objFSOlogDirProgramRaizx64NotExist, _
   objFilelogDirProgramRaizx64NotExist, _
   outFilelogDirProgramRaizx64NotExist, _
   caminhoprogramax86, _
   objFSOlogDirProgramRaizx86, _
   objFilelogDirProgramRaizx86, _
   outFilelogDirProgramRaizx86, _
   objFSOlogDirProgramRaizx86NotExist, _
   objFilelogDirProgramRaizx86NotExist, _
   outFilelogDirProgramRaizx86NotExist, _
   objFSOlogAPDeinstall, _
   objFilelogAPDeinstall, _
   outFilelogAPDeinstall, _
   objFSOlogAPInstall, _
   objFilelogAPInstall, _
   outFilelogAPInstall, _
   objFSOManipulaDir, _
   outFilelogDeinstall, _
   outFilelogInstall, _
   objGroup, _
   objSysInfo, _
   strUserDN, _
   PosInicio, _
   PosFim, _
   objUser, _
   wuser, _
   wuser2, _
   FULLNAME, _
   objShellmsg, _
   rMsgPopup, _
   countprocess, _
   objShellManipulaEXE, _
   fsoManipulaEXE, _
   runpathLSRunAS, _
   pathLSRunAS, _
   userLSRunAS, _
   passLSRunAS, _
   domainLSRrunAS, _
   commInstallLSRunAS, _
   commInstall2LSRunAS, _
   commDeinstallx86LSRunAS, _
   commGeralLSRunAS, _
   resultLSRunAS, _
   undSetor, _
   dSetor, _
   objWMIService, _
   objProcess, _
   colProcess, _
   strComputer, _ 
   strList, _
   strProcessKill, _
   objReg, _
   objFSO, _
   objFile, _
   outFile, _
   FsoManipulaZip, _
   ShellApplicationManipulaZip, _
   strDirToCompact, _
   objFolder, _
   Namedir, _
   strDirCompactado, _
   ObjManipulaZip, _
   StrCount, _
   NameEXEInstall, _
   countconfirm

'===================================================
' DECLARACAO DE CONSTANTES
'===================================================   
'CONSTANTE DA FUNCAO PARA PEGAR A LISTA DOS SOFTWARES INSTALADOS
Const HKLM = &H80000002

'===================================================
' SETAR VARIAVEIS NECESSARIAS ANTES DE SETAR OBJETO
'===================================================
'VARIAVEL QUE RECEBE O COMPUTADOR ATUAL
strComputer = "."

'===================================================
' SETAR OBJETOS
'===================================================
Set objShellmsg = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set wshShellx64 = CreateObject("WScript.Shell")
Set wshShellx64 = CreateObject("WScript.Shell")
Set wshShellx86 = CreateObject("WScript.Shell")
'Set CmdShell = Wscript.CreateObject("Wscript.Shell")
Set CmdShell = CreateObject("Wscript.Shell")
Set UndMaster = CreateObject("WScript.Shell")
Set CompName = CreateObject("WScript.Shell")
Set UName = CreateObject("WScript.Shell")
Set objFSOManipulaDir = CreateObject("Scripting.FileSystemObject")
Set objFSOlogDirSparkexiste = CreateObject("Scripting.FileSystemObject")
Set objFSOlogDirSparkcriado = CreateObject("Scripting.FileSystemObject")
Set objFSOlogDirProgramRaizx64 = CreateObject("Scripting.FileSystemObject")
Set objFSOlogDirProgramRaizx64NotExist = CreateObject("Scripting.FileSystemObject")
Set objFSOlogDirProgramRaizx86 = CreateObject("Scripting.FileSystemObject")
Set objFSOlogDirProgramRaizx86NotExist = CreateObject("Scripting.FileSystemObject")
Set objFSOlogAPDeinstall = CreateObject("Scripting.FileSystemObject")
Set objFSOlogAPInstall = CreateObject("Scripting.FileSystemObject")
Set objShellManipulaEXE = WScript.CreateObject("WScript.Shell")
Set fsoManipulaEXE = CreateObject("Scripting.FileSystemObject")
Set runpathLSRunAS = CreateObject("WScript.Shell")
'OBJETOS PARA PEGAR OS PROCESSOS CORRENTES
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _ 
& strComputer & "\root\cimv2")
'OBJETOS DA FUNCAO PARA PEGAR OS SOFTWARES INSTALADOS
Set objReg = GetObject("winmgmts://" & "." & "/root/default:StdRegProv")
Set objFSO = CreateObject("Scripting.FileSystemObject")
' OBJETO PARA RETORNAR AS INFO DE REDE NO DOMINIO
Set objSysInfo = CreateObject("ADSystemInfo")
strUserDN = objSysInfo.UserName
Set objGroup = GetObject("LDAP://" & strUserDN)

Set objUser = WScript.CreateObject("WScript.Network")

'===================================================
' SETAR VARIAVEIS
'===================================================
' ATENCAO, MODIFIQUE SOMENTE AS VARIAVEIS:
' TreeProgram; TreeProgramEXE; NameEXEInstall; DirDestinoLog; DirSourceEXE; pathLSRunAS; userLSRunAS; passLSRunAS; domainLSRrunAS; commInstallLSRunAS; APENAS O PARAMETRO DE commInstall2LSRunAS; commDeinstallx86LSRunAS; undSetor; dSetor; strProcessKill;
'---------------------------------------------------
PosInicio = InStr(strUserDN,"")
PosFim = InStr(strUserDN, ",")
'RECEBE O NOME DO DIRETORIO DE PROGRAMAS x64 EM TEXTO EXPANDIDO
x64 = wshShellx64.ExpandEnvironmentStrings("%programfiles%")
'RECEBE O NOME DO DIRETORIO DE PROGRAMAS x86 EM TEXTO EXPANDIDO
x86 = wshShellx86.ExpandEnvironmentStrings("%programfiles(x86)%")
'RECEBE O NOME DA UNIDADE RAIZ EM TEXTO EXPANDIDO
UndMaster = UndMaster.ExpandEnvironmentStrings("%systemdrive%")
'RECEBE O NOME DO COMPUTADOR EM TEXTO EXPANDIDO
CompName = CompName.ExpandEnvironmentStrings("%computername%")
'RECEBE O NOME DE USUARIO EM TEXTO EXPANDIDO
UName = UName.ExpandEnvironmentStrings("%username%")
'RECEBE A DATA
DInfo = Date
'RECEBE A HORA
HInfo = Time
'VARIAVEL QUE RECEBE O NOME DO DIRETORIO DO PROGRAMA DENTRO DO PROGRAM FILES x86 OU x64
TreeProgram = "Spark"
'VARIAVEL QUE RECEBE O NOME DO EXECUTAVEL DO PROGRAMA DENTRO DO DIRETORIO DO MESMO
TreeProgramEXE = "Spark.exe"
'RECEBE O CAMINHO COMPLETO PARA A CRIACAO OU NAO DO DIRETORIO DE LOG
DirLog = (UndMaster+"\"+CompName+".deinstall"+TreeProgram)
'RECEBE O CAMINHO COMPLETO PARA A CRIACAO DO DIRETORIO PARA COMPACTACAO DO DIRETORIO DE LOGs
DirCompactLog = (UndMaster+"\"+CompName+".compactlogs"+TreeProgram)
'RECEBE O CAMINHO COMPLETO PARA CRIACAO OU NAO DO ARQUIVO DE PARAMETRO DE DESINSTALACAO
APDeinstall = (UndMaster+"\"+CompName+".deinstall"& TreeProgram &"\deinstall.txt")
'RECEBE O CAMINHO COMPLETO PARA CRIACAO OU NAO DO ARQUIVO DE PARAMETRO DE INSTALACAO
APInstall = (UndMaster+"\"+CompName+".deinstall"& TreeProgram &"\install.txt")
'RECEBE O CAMINHO COMPLETO DO DIRETORIO x64 DO PROGRAMA A SER DESINSTALADO
caminhoprogramax64 = (x64+"\"+TreeProgram)
'RECEBE O CAMINHO COMPLETO DO DIRETORIO x86 DO PROGRAMA A SER DESINSTALADO
caminhoprogramax86 = (x86+"\"+TreeProgram)
'---------------------------------------------------
'VARIAVEL QUE RECEBE O CAMINHO DO ARQUIVO DE LOG DA FUNCAO PARA PEGAR A LISTA DOS SOFTWARES INSTALADOS
outFile = DirLog+"\"+CompName+".softwaresinstalados.b.E.a.u.txt"
'---------------------------------------------------
' VARIAVEIS QUE RECEBEM O CAMINHO COMPLETO PARA OS ARQUIVOS DE LOGs
outFilelogDirSparkexiste = DirLog+"\"+CompName+".LOG.dir"+TreeProgram+"existe.txt"
outFilelogDirSparkcriado = DirLog+"\"+CompName+".LOG.dir"+TreeProgram+"criado.txt"
outFilelogDirProgramRaizx64 = DirLog+"\"+CompName+".config.dir"+TreeProgram+"x64existe.txt"
outFilelogDirProgramRaizx64NotExist = DirLog+"\"+CompName+".sem."+TreeProgram+"x64.txt"
outFilelogDirProgramRaizx86 = DirLog+"\"+CompName+".config.dir"+TreeProgram+"x86existe.txt"
outFilelogDirProgramRaizx86NotExist = DirLog+"\"+CompName+".sem."+TreeProgram+"x86.txt"
outFilelogAPDeinstall = DirLog+"\"+CompName+".deinstalled."+TreeProgram+".ok.txt"
outFilelogAPInstall = DirLog+"\"+CompName+".installed."+TreeProgram+".ok.txt"
outFilelogDeinstall = DirLog+"\"+CompName+".deinstall."+TreeProgram+".txt"
outFilelogInstall = DirLog+"\"+CompName+".install."+TreeProgram+".txt"
'VARIAVEL QUE RECEBE O NOME DO EXECUTAVEL DE INSTALACAO
NameEXEInstall = "spark_2_7_7.exe"
'VARIAVEL QUE RECEBE O CAMINHO COMPLETO DO DIRETORIO REMOTO DE LOGs
DirDestinoLog = "\\XXX\logs"
'VARIAVEL QUE RECEBE O CAMINHO COMPLETO DE ORIGEM DO EXECUTAVEL DE INSTALACAO DO SOFTWARE
DirSourceEXE = "\\XXX\XXX\spark_2_7_7.exe"
'VARIAVEL QUE RECEBE O CAMINHO DO lsrunase
pathLSRunAS = "\\XXX\XXX\lsrunase.exe"
'USUARIO DE INSTALACAO
userLSRunAS = "Administrador"
'SENHA CRIPTOGRAFADA DO USUARIO DE INSTALACAO (UTILIZE O LSencrypt.exe PARA ENCRIPTAR)
passLSRunAS = "XXXXXX"
'DOMINIO
domainLSRrunAS = "NOME.DOMINIO.XXX"
'VARIAVEL QUE RECEBE O CAMINHO DO INSTALADOR EXECUTAVEL (JA COM OS PARAMETROS PARA INSTALACAO SILENCIOSA)
commInstallLSRunAS = "\\XXX\XXX\spark_2_7_7.exe -q"
'VARIAVEL QUE RECEBE O CAMINHO DO INSTALADOR EXECUTAVEL NO HOST(JA COM OS PARAMETROS PARA INSTALACAO SILENCIOSA)
commInstall2LSRunAS = DirLog+"\"+NameEXEInstall+" -q"
'VARIAVEL QUE RECEBE O CAMINHO DO DESINSTALADOR EXECUTAVEL (JA COM OS PARAMETROS PARA INSTALACAO SILENCIOSA)
commDeinstallx86LSRunAS = x86+"\Spark\uninstall.exe -q"
'RETORNA A LETRA DA UNIDADE EM TEXTO
runpathLSRunAS = runpathLSRunAS.ExpandEnvironmentStrings("%systemdrive%")
'VARIAVEL QUE RECEBE O NOME DA UNIDADE RESPONSAVEL DENTRO DA DIVISAO
undSetor = "XXX"
'VARIAVEL QUE RECEBE O NOME DA DIVISAO
dSetor = "XXX"
'VARIAVEL QUE RECEBE O NOME DO PROCESSO A SER FINALIZADO (ESCREVA O NOME CERTO SEGUIDO DA EXTENSAO)
strProcessKill = "'Spark.exe'"
'RETORNA O FQDN DO USUARIO
FULLNAME = mid(StrUserDN,PosInicio+3,PosFim-4)
'RETORNA O NOME COMPLETO DO USUARIO
wuser=FULLNAME
'RETORNA O NOME DE USUARIO
wuser2=objUser.UserName



'===================================================
' FUNCOES
'===================================================
'---------------------------------------------------
'FUNCAO PARA PEGAR A LISTA DE SOFTWARES INSTALADOS
'---------------------------------------------------
Function writeList(strBaseKey, objReg, objFile) 
DIM arrSubKeys, strSubKey, strValue, intRet, version, insDate
objReg.EnumKey HKLM, strBaseKey, arrSubKeys 
    For Each strSubKey In arrSubKeys
        intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, "DisplayName", strValue)
        If intRet <> 0 Then
            intRet = objReg.GetStringValue(HKLM, strBaseKey & strSubKey, "QuietDisplayName", strValue)
        End If
        objReg.GetStringValue HKLM, strBaseKey & strSubKey, "DisplayVersion", version
        objReg.GetStringValue HKLM, strBaseKey & strSubKey, "InstallDate", insDate 
        If (strValue <> "") and (intRet = 0) Then
            objFile.Write strValue & "," & version & "," & insDate & vbCrLf
        End If
    Next
End Function
'---------------------------------------------------

'===================================================
' ROTINAS
'===================================================

REM ---------------------------------------------------
REM  ROTINA PARA VERIFICAR SE EXISTE O ARQUIVO ZIP
REM ---------------------------------------------------

If (fso.FolderExists(DirCompactLog)) Then
   
   If (fso.FileExists(DirCompactLog+"\"+CompName+".deinstall"+TreeProgram+".zip")) Then
      
      WScript.Quit()
   Else
   
      Call VerificaDirLocalLog
   End If
Else
   
   Call VerificaDirLocalLog
End If

REM ---------------------------------------------------
REM  ROTINA PARA VERIFICAR SE EXISTE DIRETORIO DE LOGs PARA DESINSTALACAO DO Spark
REM ---------------------------------------------------
REM FAZ A VERIFICACAO SE EXISTE O DIRETORIO DE LOGs PARA DESINSTALACAO DO Spark. CASO EXISTA, GERA LOG E PROSSEGUE PARA COMPARAx64.
REM CASO NAO EXISTA, ELE CRIA O MESMO, GERA LOG E PROSSEGUE PARA COMPARAx64
Sub VerificaDirLocalLog

If (fso.FolderExists(DirLog)) Then

    If (fso.FileExists(outFilelogDirSparkexiste)) Then
      'O argumento "iomode" pode ter qualquer uma das seguintes configurações:
      'Valor constante Descrição
      'ForReading 1 Abra um arquivo somente para leitura. Você não pode escrever neste arquivo.
      'ForWriting 2 Abra um arquivo para gravação.
      'ForAppending 8 Abra um arquivo e grave no final do arquivo.
       Set objFilelogDirSparkexiste = objFSOlogDirSparkexiste.OpenTextFile(outFilelogDirSparkexiste,8)
       objFilelogDirSparkexiste.WriteLine("O diretorio de logs para desinstalacao do "+TreeProgram+" na maquina "+CompName+" ja existia. Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogDirSparkexiste.Close
       Call VerificaDirRaizSparkx64
       'WScript.Quit()

   Else
      Set objFilelogDirSparkexiste = objFSOlogDirSparkexiste.CreateTextFile(outFilelogDirSparkexiste,True)
       objFilelogDirSparkexiste.WriteLine("O diretorio de logs para desinstalacao do "+TreeProgram+" na maquina "+CompName+" ja existia. Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogDirSparkexiste.Close
      Call VerificaDirRaizSparkx64
   End If
Else
 
  'CRIAR DIRETORIO VIA VBS
  objFSOManipulaDir.CreateFolder (DirLog)
  objFSOManipulaDir.CreateFolder (DirCompactLog)
  Set objFilelogDirSparkcriado = objFSOlogDirSparkcriado.CreateTextFile(outFilelogDirSparkcriado,True)
  objFilelogDirSparkcriado.WriteLine("O diretorio de logs para desinstalacao do "+TreeProgram+" na maquina "+CompName+" foi criado. Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
  objFilelogDirSparkcriado.Close
End If
'ATIVAR A COPIA DO ARQUIVO EXECUTAVEL DE INSTALACAO, DESCOMENTANDO A LINHA ABAIXO, CASO NAO QUEIRA INSTALAR DA REDE. OBS.: NECESSARIO DESCOMENTAR E COMENTAR AS LINHAS CORRESPONDENTES NA ROTINA DE INSTALACAO.
CmdShell.Run CmdShell.ExpandEnvironmentStrings( "%SystemRoot%\system32\cmd.exe /c copy " & DirSourceEXE & " " & DirLog & """" ), 0, True 
Call VerificaDirRaizSparkx64
'WScript.Quit()

End Sub

REM ---------------------------------------------------
REM  ROTINA PARA VERIFICAR SE EXISTE DIRETORIO RAIZ x64
REM ---------------------------------------------------
Sub VerificaDirRaizSparkx64

If (fso.FolderExists(caminhoprogramax64)) Then


If (fso.FileExists(outFilelogDirProgramRaizx64)) Then
       Set objFilelogDirProgramRaizx64 = objFSOlogDirProgramRaizx64.OpenTextFile(outFilelogDirProgramRaizx64,8)
       objFilelogDirProgramRaizx64.WriteLine("O diretorio do "+TreeProgram+" x64 existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogDirProgramRaizx64.Close
       Call VerArqParamDeinstall
       'WScript.Quit()

   Else
      Set objFilelogDirProgramRaizx64 = objFSOlogDirProgramRaizx64.CreateTextFile(outFilelogDirProgramRaizx64,True)
       objFilelogDirProgramRaizx64.WriteLine("O diretorio do "+TreeProgram+" x64 existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogDirProgramRaizx64.Close
       Call VerArqParamDeinstall
       'WScript.Quit()
   End If
Else If (fso.FileExists(outFilelogDirProgramRaizx64NotExist)) Then
       Set objFilelogDirProgramRaizx64NotExist = objFSOlogDirProgramRaizx64NotExist.OpenTextFile(outFilelogDirProgramRaizx64NotExist,8)
       objFilelogDirProgramRaizx64NotExist.WriteLine("O diretorio do "+TreeProgram+" x64 nao existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogDirProgramRaizx64NotExist.Close
       Call VerificaDirRaizSparkx86
       'WScript.Quit()
   Else
      Set objFilelogDirProgramRaizx64NotExist = objFSOlogDirProgramRaizx64NotExist.CreateTextFile(outFilelogDirProgramRaizx64NotExist,True)
       objFilelogDirProgramRaizx64NotExist.WriteLine("O diretorio do "+TreeProgram+" x64 nao existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogDirProgramRaizx64NotExist.Close
   End If
End If
Call VerificaDirRaizSparkx86

'WScript.Quit()

End Sub

REM ---------------------------------------------------
REM  ROTINA PARA VERIFICAR SE EXISTE DIRETORIO RAIZ x86
REM ---------------------------------------------------
Sub VerificaDirRaizSparkx86

If (fso.FolderExists(caminhoprogramax86)) Then


If (fso.FileExists(outFilelogDirProgramRaizx86)) Then
       Set objFilelogDirProgramRaizx86 = objFSOlogDirProgramRaizx86.OpenTextFile(outFilelogDirProgramRaizx86,8)
       objFilelogDirProgramRaizx86.WriteLine("O diretorio do "+TreeProgram+" x86 existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogDirProgramRaizx86.Close
       Call VerArqParamDeinstall
       'WScript.Quit()

   Else
      Set objFilelogDirProgramRaizx86 = objFSOlogDirProgramRaizx86.CreateTextFile(outFilelogDirProgramRaizx86,True)
       objFilelogDirProgramRaizx86.WriteLine("O diretorio do "+TreeProgram+" x86 existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogDirProgramRaizx86.Close
       Call VerArqParamDeinstall
       'WScript.Quit()
   End If
Else If (fso.FileExists(outFilelogDirProgramRaizx86NotExist)) Then
       Set objFilelogDirProgramRaizx86NotExist = objFSOlogDirProgramRaizx86NotExist.OpenTextFile(outFilelogDirProgramRaizx86NotExist,8)
       objFilelogDirProgramRaizx86NotExist.WriteLine("O diretorio do "+TreeProgram+" x86 nao existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogDirProgramRaizx86NotExist.Close
       Call RISpark
       'WScript.Quit()
   Else
      Set objFilelogDirProgramRaizx86NotExist = objFSOlogDirProgramRaizx86NotExist.CreateTextFile(outFilelogDirProgramRaizx86NotExist,True)
       objFilelogDirProgramRaizx86NotExist.WriteLine("O diretorio do "+TreeProgram+" x86 nao existe na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogDirProgramRaizx86NotExist.Close
   End If
End If
Call RISpark

'WScript.Quit()

End Sub

REM ---------------------------------------------------
REM  ROTINA PARA VERIFICAR ARQUIVO DE PARAMETRO DEINSTALL
REM ---------------------------------------------------
Sub VerArqParamDeinstall
  
If (fso.FileExists(APDeinstall)) Then
   If (fso.FileExists(outFilelogAPDeinstall)) Then
       Set objFilelogAPDeinstall = objFSOlogAPDeinstall.OpenTextFile(outFilelogAPDeinstall,8)
       objFilelogAPDeinstall.WriteLine("O "+TreeProgram+" ja havia sido desinstalado na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogAPDeinstall.Close
       Call VerArqParamInstall
       'WScript.Quit()
   Else
      Set objFilelogAPDeinstall = objFSOlogAPDeinstall.CreateTextFile(outFilelogAPDeinstall,True)
       objFilelogAPDeinstall.WriteLine("O "+TreeProgram+" ja havia sido desinstalado na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogAPDeinstall.Close
      Call VerArqParamInstall
   End If
Else
  'CASO NAO EXISTA O ARQUIVO DE PARAMETRO DE DESINSTALACAO, ELE EXIBE A MSG E CHAMA O PROCEDIMENTO
  rMsgPopup = objShellmsg.Popup("Prezado(a) sr(a). "+wuser+", estamos realizando alguns procedimentos. Solicitamos que esteja na frente do seu computador para acompanhar os passos. Qualquer duvida, entre em contato com a " & undSetor & " na " & dSetor & ".", 20, "User: "+wuser2, 0 + 64)
  
  Call VerSysBeforeUninstall
  'WScript.Quit() 
End If

End Sub

REM ---------------------------------------------------
REM  ROTINA PARA VERIFICAR ARQUIVO DE PARAMETRO INSTALL
REM ---------------------------------------------------
Sub VerArqParamInstall

If (fso.FileExists(APInstall)) Then
   If (fso.FileExists(outFilelogAPInstall)) Then
       Set objFilelogAPInstall = objFSOlogAPInstall.OpenTextFile(outFilelogAPInstall,8)
       objFilelogAPInstall.WriteLine("O "+TreeProgram+" ja havia sido instalado na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
       objFilelogAPInstall.Close
       'WScript.Quit()
   Else
      Set objFilelogAPInstall = objFSOlogAPInstall.CreateTextFile(outFilelogAPInstall,True)
       objFilelogAPInstall.WriteLine("O "+TreeProgram+" ja havia sido instalado na maquina "+CompName+". Este log foi gerado em "& DInfo &" as "& HInfo &" pelo usuario "+UName)
      objFilelogAPInstall.Close
      'WScript.Quit()
   End If
 Call Compactar
 rMsgPopup = objShellmsg.Popup("Prezado(a) sr(a). "+wuser+", os procedimentos foram finalizados. Agradecemos a compreensao!! Lembrando que qualquer duvida, entre em contato com a " & undSetor & " na " & dSetor & ".", 20, "User: "+wuser2, 0 + 64)
 WScript.Quit()
Else
  
  Call RISpark
  'WScript.Quit() 
End If

End Sub

REM ---------------------------------------------------
REM  ROTINA DE VERIFICACAO ANTES DE DESINSTALAR Spark
REM ---------------------------------------------------
Sub VerSysBeforeUninstall

'CHAMADA NA FUNCAO PARA PEGAR A LISTA DOS SOFTWARES INSTALADOS
If (objFSO.FileExists(outFile)) Then
  Set objFile = objFSO.OpenTextFile(outFile,8)
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"SOFTWARES INSTALADOS DEPOIS"+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"-----------")
  writeList "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
  writeList "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
    
   'FOR PARA PEGAR OS PROCESSOS CORRENTES DEPOIS
   Set colProcess = objWMIService.ExecQuery _
   ("Select * from Win32_Process")   
   countprocess = 0
   For Each objProcess in colProcess
   strList = strList & vbCr & _
   objProcess.Name+vbnewline
   countprocess = countprocess + 1
   Next
  
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"PROCESSOS CORRENTES DEPOIS:"+vbnewline+"TOTAL DE " & countprocess & " PROCESSOS ABERTOS."+vbnewline+"-----------"+vbnewline+strList) 
  objFile.Close
  If (fso.FileExists(APInstall)) Then
   WScript.Quit()
  Else
   Call RDSpark
  End If
Else
  Set objFile = objFSO.CreateTextFile(outFile,True)
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"SOFTWARES INSTALADOS ANTES"+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"-----------")
  writeList "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
  writeList "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
    
   'FOR PARA PEGAR OS PROCESSOS CORRENTES ANTES
   Set colProcess = objWMIService.ExecQuery _
   ("Select * from Win32_Process")
   countprocess = 0
   For Each objProcess in colProcess
   strList = strList & vbCr & _
   objProcess.Name+vbnewline
   countprocess = countprocess + 1
   Next
  
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"PROCESSOS CORRENTES ANTES:"+vbnewline+"TOTAL DE " & countprocess & " PROCESSOS ABERTOS."+vbnewline+"-----------"+vbnewline+strList)
  objFile.Close
  If (fso.FileExists(APInstall)) Then
   WScript.Quit()
  Else
   Call RDSpark
  End If
End if
'---------------------------------------------------
End Sub

REM ---------------------------------------------------
REM  ROTINA PARA DESINSTALAR Spark
REM ---------------------------------------------------
Sub RDSpark
'FALTA ESCREVER A ROTINA PARA 64 BITS

If (fso.FolderExists(caminhoprogramax86)) Then
  If (fso.FileExists(caminhoprogramax86+"\"+TreeProgramEXE)) Then

    If (objFSO.FileExists(outFilelogDeinstall)) Then
      Set objFile = objFSO.OpenTextFile(outFilelogDeinstall,8)
      objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
      'PARAR PROCESSO DO SPARK
      Set colProcess = objWMIService.ExecQuery _
            ("Select * from Win32_Process Where Name = " & strProcessKill )
         If colProcess.count > 0 then
            
            objFile.WriteLine(vbnewline+"O processo do "& strProcessKill &" existe e será encerrado.")
            For Each objProcess in colProcess
               objProcess.Terminate()
            Next

            objFile.WriteLine(vbnewline+"O processo do "& strProcessKill &" foi finalizado.")
         Else

            objFile.WriteLine(vbnewline+"O processo do "& strProcessKill &" nao estava sendo executado.")
         End if 
      'DESINSTALAR SPARK
      'VARIAVEL QUE RECEBE O COMANDO COMPLETO DE DESINSTALACAO PARA UTILIZAR NO lsrunase
      commGeralLSRunAS = "" & pathLSRunAS & " /user:" & userLSRunAS & " /password:" & passLSRunAS & " /domain:" & domainLSRrunAS & " /command:" & Chr(34) & commDeinstallx86LSRunAS & Chr(34) & " /runpath:" & Chr(34) & runpathLSRunAS & "\" & Chr(34) & ""
      'SETAR COM 0 O VALOR DA VARIAVEL DE RESPOSTA DO lsrunas
      resultLSRunAS = 0
      'INSTALA O PROGRAMA
      resultLSRunAS = objShellManipulaEXE.Run(commGeralLSRunAS, 0 ,True)
      'ESCRITA NO ARQUIVO DE LOG [0-sucesso/3010-sucesso&requer reboot]
      Wscript.Sleep 500
      If (resultLSRunAS = 0) Or (resultLSRunAS = 3010) Then

         'CONFIRMAR SE AINDA EXISTE O DIRETORIO x86 DO SOFTWARE
         countconfirm = 0
         'INICIA O LOOP COM O CONTADOR EM 0, CASO AINDA TENHA O DIRETORIO x86, QUANDO CHEGAR A 10, ELE SAI DO LOOP
         For countconfirm = 0 to countconfirm = 10
            
            'ADICIONA UM TEMPO DE ESPERA DE 18 SEGUNDOS PARA EXECUTAR A PROXIMA INSTRUCAO (AO FINAL VAI DAR UM TEMPO DE 3 MINUTOS)
            WScript.Sleep 18000
            If (fso.FolderExists(caminhoprogramax86)) Then
               
               'ADICIONA UM TEMPO A MAIS DE 12 SEGUNDOS (AO FINAL VAI DAR UM TEMPO DE 2 MINUTOS A MAIS)
               WScript.Sleep 12000
            Else
               
               'SAI DO LOOP, CASO NAO EXISTA MAIS O DIRETORIO x86
               Exit For
            End If
            
            'INCREMENTA O CONTADOR
            countconfirm = countconfirm + 1
         Next
         
         'GERAR ARQUIVO DE PARAMETRO
         Set objFile = objFSO.CreateTextFile(APDeinstall,True)
         objFile.WriteLine (TreeProgram+" desinstalado com sucesso em "& DInfo &" as "& HInfo &" - USUARIO LOGADO: "+UName+".")
         objFile.Close
         'CHAMAR ROTINA DE VERIFICACAO DE SOFTWARES INSTALADOS E PROCESSOS CORRENTES
         Call VerSysAfterUninstall
      
         'MSG PARA REINICIAR O SISTEMA APOS DESINSTALAR O PROGRAMA
         rMsgPopup = objShellmsg.Popup("Prezado(a) sr(a). "+wuser+", seu computador vai reiniciar em alguns segundos. Qualquer duvida, entre em contato com a " & undSetor & " na " & dSetor & ".", 20, "User: "+wuser2, 0 + 48)
         'REINICIAR O COMPUTADOR
         CmdShell.Run "wmic os where Primary='TRUE' reboot"
         WScript.Quit()
      Else
         Set objFile = objFSO.OpenTextFile(outFilelogDeinstall,8)
         objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
         objFile.WriteLine (vbnewline+"Falha ao desinstalar o " & TreeProgram & ".")
         objFile.Close
      End If
   Else
      Set objFile = objFSO.CreateTextFile(outFilelogDeinstall,True)
      objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
      'PARAR PROCESSO DO SPARK
      Set colProcess = objWMIService.ExecQuery _
            ("Select * from Win32_Process Where Name = " & strProcessKill )
         If colProcess.count > 0 then

            objFile.WriteLine(vbnewline+"O processo do "& strProcessKill &" existe e será encerrado.")
            For Each objProcess in colProcess
               objProcess.Terminate()
            Next

            objFile.WriteLine(vbnewline+"O processo do "& strProcessKill &" foi finalizado.")
         Else

            objFile.WriteLine(vbnewline+"O processo do "& strProcessKill &" nao estava sendo executado.")
         End if 
      'DESINSTALAR SPARK
      'VARIAVEL QUE RECEBE O COMANDO COMPLETO DE DESINSTALACAO PARA UTILIZAR NO lsrunase
      commGeralLSRunAS = "" & pathLSRunAS & " /user:" & userLSRunAS & " /password:" & passLSRunAS & " /domain:" & domainLSRrunAS & " /command:" & Chr(34) & commDeinstallx86LSRunAS & Chr(34) & " /runpath:" & Chr(34) & runpathLSRunAS & "\" & Chr(34) & ""
      'SETAR COM 0 O VALOR DA VARIAVEL DE RESPOSTA DO lsrunas
      resultLSRunAS = 0
      'INSTALA O PROGRAMA
      resultLSRunAS = objShellManipulaEXE.Run(commGeralLSRunAS, 0 ,True)
      'ESCRITA NO ARQUIVO DE LOG [0-sucesso/3010-sucesso&requer reboot]
      Wscript.Sleep 500
      If (resultLSRunAS = 0) Or (resultLSRunAS = 3010) Then      

         'CONFIRMAR SE AINDA EXISTE O DIRETORIO x86 DO SOFTWARE
         countconfirm = 0
         'INICIA O LOOP COM O CONTADOR EM 0, CASO AINDA TENHA O DIRETORIO x86, QUANDO CHEGAR A 10, ELE SAI DO LOOP
         For countconfirm = 0 to countconfirm = 10
            
            'ADICIONA UM TEMPO DE ESPERA DE 18 SEGUNDOS PARA EXECUTAR A PROXIMA INSTRUCAO (AO FINAL VAI DAR UM TEMPO DE 3 MINUTOS)
            WScript.Sleep 18000
            If (fso.FolderExists(caminhoprogramax86)) Then
               
               'ADICIONA UM TEMPO A MAIS DE 12 SEGUNDOS (AO FINAL VAI DAR UM TEMPO DE 2 MINUTOS A MAIS)
               WScript.Sleep 12000
            Else
               
               'SAI DO LOOP, CASO NAO EXISTA MAIS O DIRETORIO x86
               Exit For
            End If
            
            'INCREMENTA O CONTADOR
            countconfirm = countconfirm + 1
         Next
         
         'GERAR ARQUIVO DE PARAMETRO
         Set objFile = objFSO.CreateTextFile(APDeinstall,True)
         objFile.WriteLine (TreeProgram+" desinstalado com sucesso em "& DInfo &" as "& HInfo &" - USUARIO LOGADO: "+UName+".")
         objFile.Close
         'CHAMAR ROTINA DE VERIFICACAO DE SOFTWARES INSTALADOS E PROCESSOS CORRENTES
         Call VerSysAfterUninstall
         'MSG PARA REINICIAR O SISTEMA APOS DESINSTALAR O PROGRAMA
         rMsgPopup = objShellmsg.Popup("Prezado(a) sr(a). "+wuser+", seu computador vai reiniciar em alguns segundos. Qualquer duvida, entre em contato com a " & undSetor & " na " & dSetor & ".", 20, "User: "+wuser2, 0 + 48)
         Set objFile = objFSO.OpenTextFile(outFilelogDeinstall,8)
         objFile.WriteLine (vbnewline+"Reiniciando  a maquina em "& DInfo &" as "& HInfo &" - USUARIO LOGADO: "+UName+".")
         objFile.Close
         'REINICIAR O COMPUTADOR
         CmdShell.Run "wmic os where Primary='TRUE' reboot"
         WScript.Quit()
      Else
         Set objFile = objFSO.OpenTextFile(outFilelogDeinstall,8)
         objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
         objFile.WriteLine (vbnewline+"Falha ao desinstalar o " & TreeProgram & ".")
         objFile.Close
      End If
   End If
  Else
        Set objFile = objFSO.CreateTextFile(outFilelogDeinstall,True)
      objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
      objFile.WriteLine (vbnewline+"Nao foi encontrado o executavel do software " & TreeProgram & " dentro do diretorio do mesmo. E recomendavel deletar o diretorio para poder realizar nova instalacao.")
      objFile.Close
      'DELETAR DIRETORIO VIA VBS - OBS.: NECESSITA DIREITOS ELEVADOS
      'objFSOManipulaDir.DeleteFolder caminhoprogramax86,True
     'set objFSOManipulaDir= objFSO.GetFolder(caminhoprogramax86)
     'objFSOManipulaDir.Delete
     'Call VerSysAfterUninstall
      'WScript.Quit()
  End If
Else
     Set objFile = objFSO.CreateTextFile(outFilelogDeinstall,True)
   objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
   objFile.WriteLine (vbnewline+"O software " & TreeProgram & " nao foi encontrado.")
   objFile.Close
End If

WScript.Quit()

End Sub


REM ---------------------------------------------------
REM  ROTINA DE VERIFICACAO DEPOIS DE DESINSTALAR Spark
REM ---------------------------------------------------
Sub VerSysAfterUninstall
'MsgBox "vc entrou na subrotina de verificacao antes de desinstalar o spark,16,teste"

'CHAMADA NA FUNCAO PARA PEGAR A LISTA DOS SOFTWARES INSTALADOS
If (objFSO.FileExists(outFile)) Then
  
  Set objFile = objFSO.OpenTextFile(outFile,8)
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"SOFTWARES INSTALADOS DEPOIS DE DESINSTALAR"+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"-----------")
  writeList "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
  writeList "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
    
   'FOR PARA PEGAR OS PROCESSOS CORRENTES DEPOIS
   countprocess = 0
   Set colProcess = objWMIService.ExecQuery _
   ("Select * from Win32_Process")   
   For Each objProcess in colProcess
      strList = strList & vbCr & _
      objProcess.Name+vbnewline
      countprocess = countprocess + 1
   Next
  
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"PROCESSOS CORRENTES DEPOIS DE DESINSTALAR:"+vbnewline+"TOTAL DE " & countprocess & " PROCESSOS ABERTOS."+vbnewline+"-----------"+vbnewline+strList) 
  objFile.Close
  If (fso.FileExists(APInstall)) Then
   
   WScript.Quit()
  Else
  
   'Call RDSpark
  End If
Else
  
  Set objFile = objFSO.CreateTextFile(outFile,True)
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"SOFTWARES INSTALADOS ANTES"+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"-----------")
  writeList "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
  writeList "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", objReg, objFile
    
   'FOR PARA PEGAR OS PROCESSOS CORRENTES ANTES
   countprocess = 0
   Set colProcess = objWMIService.ExecQuery _
   ("Select * from Win32_Process")
   For Each objProcess in colProcess
      strList = strList & vbCr & _
      objProcess.Name+vbnewline
      countprocess = countprocess + 1
   Next
  
  objFile.WriteLine (vbnewline+"-----------"+vbnewline+"PROCESSOS CORRENTES ANTES:"+vbnewline+"TOTAL DE " &countprocess & " PROCESSOS ABERTOS."+vbnewline+"-----------"+vbnewline+strList)
  objFile.Close
  If (fso.FileExists(APInstall)) Then
   
   WScript.Quit()
  Else
   
   'Call RDSpark
  End If

End if
'---------------------------------------------------
End Sub


REM ---------------------------------------------------
REM  ROTINA PARA INSTALAR O PROGRAMA
REM ---------------------------------------------------
Sub RISpark

  'EXIBE A MSG DE INSTALACAO
  rMsgPopup = objShellmsg.Popup("Prezado(a) sr(a). "+wuser+", resta realizar apenas mais um procedimento. Por favor, aguarde... Qualquer duvida, entre em contato com a " & undSetor & " na " & dSetor & ".", 20, "User: "+wuser2, 0 + 64)

If fsoManipulaEXE.FileExists(pathLSRunAS) Then

   'VARIAVEL QUE RECEBE O COMANDO COMPLETO DE INSTALACAO PARA UTILIZAR NO lsrunase
   'commGeralLSRunAS = "" & pathLSRunAS & " /user:" & userLSRunAS & " /password:" & passLSRunAS & " /domain:" & domainLSRrunAS & " /command:" & Chr(34) & commInstallLSRunAS & Chr(34) & " /runpath:" & Chr(34) & runpathLSRunAS & "\" & Chr(34) & ""
   'DESCOMENTAR A LINHA ABAIXO E COMENTAR A LINHA ACIMA CASO QUEIRA INSTALAR DO PROPRIO HOST. OBS.: E NECESSARIO DESCOMENTAR "NO COMECO" A LINHA QUE COPIA O EXECUTAVEL DE INSTALACAO PARA O HOST.
   commGeralLSRunAS = "" & pathLSRunAS & " /user:" & userLSRunAS & " /password:" & passLSRunAS & " /domain:" & domainLSRrunAS & " /command:" & Chr(34) & commInstall2LSRunAS & Chr(34) & " /runpath:" & Chr(34) & runpathLSRunAS & "\" & Chr(34) & ""
   'SETAR COM 0 O VALOR DA VARIAVEL DE RESPOSTA DO lsrunas
   resultLSRunAS = 0
   'INSTALA O PROGRAMA
   resultLSRunAS = objShellManipulaEXE.Run(commGeralLSRunAS, 0 ,True)
   'ESCRITA NO ARQUIVO DE LOG [0-sucesso/3010-sucesso&requer reboot]
   Set objFile = objFSO.CreateTextFile(outFilelogInstall,True)
   objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
   objFile.WriteLine (vbnewline+"Instalando o " & TreeProgram & ", verifique o arquivo " & APInstall & ".")
   Wscript.Sleep 500
   
   If (resultLSRunAS = 0) Or (resultLSRunAS = 3010) Then


         'CONFIRMAR SE EXISTE O DIRETORIO x86 DO SOFTWARE
         countconfirm = 0
         'INICIA O LOOP COM O CONTADOR EM 0, CASO AINDA TENHA O DIRETORIO x86, QUANDO CHEGAR A 40, ELE SAI DO LOOP
         For countconfirm = 0 to countconfirm = 40
            
            'ADICIONA UM TEMPO DE ESPERA DE 18 SEGUNDOS PARA EXECUTAR A PROXIMA INSTRUCAO (AO FINAL VAI DAR UM TEMPO DE 12 MINUTOS)
            WScript.Sleep 18000
            If (fso.FolderExists(caminhoprogramax86)) Then
               If (fso.FileExists(caminhoprogramax86+"\"+TreeProgramEXE)) Then
                  
                  'SAI DO LOOP, CASO EXISTA O DIRETORIO x86
                  Exit For
               Else
               
                  'ADICIONA UM TEMPO A MAIS DE 12 SEGUNDOS (AO FINAL VAI DAR UM TEMPO DE 2 MINUTOS A MAIS)
                  WScript.Sleep 12000               
               End If
            Else
               
               'ADICIONA UM TEMPO A MAIS DE 12 SEGUNDOS (AO FINAL VAI DAR UM TEMPO DE 2 MINUTOS A MAIS)
               WScript.Sleep 12000   
            End IF
            
            'INCREMENTA O CONTADOR
            countconfirm = countconfirm + 1
         Next
         
      
      'GERAR ARQUIVO DE PARAMETRO
      Set objFile = objFSO.CreateTextFile(APInstall,True)
      objFile.WriteLine (TreeProgram & " instalado com sucesso em "& DInfo &" as "& HInfo &" - USUARIO LOGADO: "+UName+".")
      objFile.Close
      'CHAMAR ROTINA DE VERIFICACAO DE SOFTWARES INSTALADOS E PROCESSOS CORRENTES
      Call VerSysBeforeUninstall
      WScript.Quit()
   Else

      Set objFile = objFSO.OpenTextFile(outFilelogInstall,8)
      objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
      objFile.WriteLine (vbnewline+"Falha ao instalar o " & TreeProgram & ".")
      objFile.Close
      WScript.Quit()
   End If
   
Else
   Set objFile = objFSO.CreateTextFile(outFilelogInstall,True)
   objFile.WriteLine (vbnewline+"-----------"+vbnewline+"USUARIO LOGADO: "+UName+"."+vbnewline+"DATA: "& DInfo &" AS: "& HInfo &"."+vbnewline+"MAQUINA: "+CompName+vbnewline+"-----------")
   objFile.WriteLine (vbnewline+"Caminho: " & pathLSRunAS & " invalido. Verifique o UNC correto para o LSRunAS.")
   objFile.Close
   WScript.Quit()
End If

End Sub

REM ---------------------------------------------------
REM  ROTINA PARA COMPACTAR O DIRETORIO DE LOGs
REM ---------------------------------------------------
Sub Compactar

'DELETA ARQUIVO DE INSTALACAO DA DIRETORIO DE LOGs ANTES DE COMPACTAR
CmdShell.Run CmdShell.ExpandEnvironmentStrings( "%SystemRoot%\system32\cmd.exe /c del /F " & DirLog & "\" &NameEXEInstall & """""" ), 0, True 

Set FsoManipulaZip = CreateObject("Scripting.FileSystemObject") 
Set ShellApplicationManipulaZip = CreateObject("Shell.Application") 
 
'RECEBE O CAMINHO DO DIRETORIO DE ORIGEM PARA SER COMPACTADO
strDirToCompact = DirLog
 
Set objFolder = FsoManipulaZip.GetFolder(strDirToCompact) 
Namedir = objFolder.Name 
'CASO QUEIRA SABER QUAL DIRETORIO ESTA SENDO COMPACTADO, REMOVA O COMENTARIO DA LINHA ABAIXO
'WScript.Echo "Nome do arquivo selecionado: " &  Namedir 

If (fso.FolderExists(DirCompactLog)) Then 
   'RECEBE O CAMINHO DE DESTINO DO ARQUIVO COMPACTADO
   strDirCompactado = DirCompactLog
 
   strDirCompactado = fsoManipulaZip.GetAbsolutePathName (strDirCompactado) 
   strDirToCompact = fsoManipulaZip.GetAbsolutePathName (strDirToCompact) 
 
   strDirCompactado = strDirCompactado & "\" & Namedir & ".zip" 
 
 
   Set ObjManipulaZip  = FsoManipulaZip.OpenTextFile(strDirCompactado, 8, True, 0) 
      ObjManipulaZip.Write "" 
      ObjManipulaZip.Close 
   Set ObjManipulaZip = Nothing 
   Set FsoManipulaZip = Nothing 
 
 
   ShellApplicationManipulaZip.NameSpace(strDirCompactado).CopyHere ShellApplicationManipulaZip.NameSpace(strDirToCompact).Items, &H0& 
 
 
   Do Until ShellApplicationManipulaZip.NameSpace(strDirCompactado).Items.Count =          ShellApplicationManipulaZip.NameSpace(strDirToCompact).Items.Count 
   WScript.Sleep 100 
   Loop 
   
   'CASO QUEIRA SABER QUANTOS ARQUIVOS FORAM COMPACTADOS, REMOVA O COMENTARIO DAS LINHAS ABAIXO
    'StrCount = "Diretorio compactado com sucesso! Numeros de arquivo compactados: "  
    'StrCount = StrCount & ShellApplicationManipulaZip.NameSpace(strDirToCompact).Items.Count 
    'MsgBox(StrCount) 
 
   Set ShellApplicationManipulaZip = Nothing 
Else

   objFSOManipulaDir.CreateFolder (DirCompactLog)
   'RECEBE O CAMINHO DE DESTINO DO ARQUIVO COMPACTADO
   strDirCompactado = DirCompactLog
 
   strDirCompactado = fsoManipulaZip.GetAbsolutePathName (strDirCompactado) 
   strDirToCompact = fsoManipulaZip.GetAbsolutePathName (strDirToCompact) 
 
   strDirCompactado = strDirCompactado & "\" & Namedir & ".zip" 
 
 
   Set ObjManipulaZip  = FsoManipulaZip.OpenTextFile(strDirCompactado, 8, True, 0) 
      ObjManipulaZip.Write "" 
      ObjManipulaZip.Close 
   Set ObjManipulaZip = Nothing 
   Set FsoManipulaZip = Nothing 
 
 
   ShellApplicationManipulaZip.NameSpace(strDirCompactado).CopyHere ShellApplicationManipulaZip.NameSpace(strDirToCompact).Items, &H0& 
 
 
   Do Until ShellApplicationManipulaZip.NameSpace(strDirCompactado).Items.Count =          ShellApplicationManipulaZip.NameSpace(strDirToCompact).Items.Count 
   WScript.Sleep 100 
   Loop 
    
   'CASO QUEIRA SABER QUANTOS ARQUIVOS FORAM COMPACTADOS, REMOVA O COMENTARIO DAS LINHAS ABAIXO
    'StrCount = "Diretorio compactado com sucesso! Numeros de arquivo compactados: "  
    'StrCount = StrCount & ShellApplicationManipulaZip.NameSpace(strDirToCompact).Items.Count 
    'MsgBox(StrCount) 
 
   Set ShellApplicationManipulaZip = Nothing

End If
'COPIAR O DIRETORIO DE LOG COMPACTADO PARA O SERVIDOR
'O zero significa que o comando e executado oculto e o True aguarda o termino do comando Executar antes de executar o proximo comando.
CmdShell.Run CmdShell.ExpandEnvironmentStrings( "%SystemRoot%\system32\cmd.exe /c copy " & strDirCompactado & " " & DirDestinoLog & """" ), 0, True 
End Sub

Scripts recomendados

Fazendo um ajuste não linear em dados experimentais - FORTRAN 90

Conectar o gns3 na Internet

Método das Cordas em SCILAB

Cálculo de HugePages - Excel

Perguntas e respostas com Assembly e NASM


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts