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

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

[ Hits: 3.625 ]

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

Perguntas e respostas com Assembly e NASM

Código "Vírus do Atalho"

Programação para sistemas embarcados em Assembly

PJEOffice - Baixa automaticamente última versão do CNJ (Conselho Nacional de Justi&cce

Crivo de Eratóstenes Simples em XBase (Clipper)


  

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