none
Ajunda na Criação de uma SUB para valor que não existe no Registro RRS feed

  • Pergunta

  • Ba Galera

    Bom dia

    Gostaria de uma ajuda dos amigos, montei o script abaixo que esta funcionado sem erros, e ele tem o objetivo de configurar uma nova versão de um aplicativo de uma das empresas que dou suporte. Como descrevi ele esta funcionada sem erros nele colocou a coleta de uma chave de registro e caso esta chave esteja como valor V1.1, e executa a sub, e cria um log simples desta execução, aonde esta o meu problema que gostaria da ajuda dos amigos, este executável "config.exe" também instala a versão caso ela não exista na estação, porem pela logica que montei ele só executa a sub se a chave for encontrada e se o valor da mesma for V1.1, como eu cria um novo "case" para uma nova "sub" com a condição, não achou a chave, execute a sub exec02.

    Obrigado Tche.

    Codigo.

    Const HKLM = &H80000002
    
    Set objShell=CreateObject("WScript.Shell")
     strCompName = objShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
     strUserName = objShell.ExpandEnvironmentStrings("%USERNAME%")
    
    strComputer = "."
    
    Set oReg=GetObject("winmgmts:\\" & _
       strComputer & "\root\default:StdRegProv")
       
    oReg.GetStringValue HKLM,"SOFTWARE\MicroSiga\","Controle", strConsulta
    
    Select Case strConsulta
    
    Case "V1.1"
    Exec01
    
    End Select
    
    Sub Exec01
    
    strkey = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MicroSiga\Controle")
    strkeyvalor = "V2.1"
    strcaminho = "\\server01\microsiga\LOG\"
    
    if UCASE(strkey) <> strkeyvalor Then
       objShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\MicroSiga\Controle", strkeyvalor , "REG_SZ"
    End If
    
    strkeyfinal = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MicroSiga\Controle")
    
    sFileName = strcaminho & strCompName & ".log"
    
    
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     If Not objFSO.FileExists(sFileName) Then
         set objFile = objFSO.createtextfile(sFileName)
         objFile.WriteLine Now & " | " & strCompName &  " | " & strUserName &  " | " & strkeyfinal
         objFile.Close
         objShell.run "\\server01\microsiga\config\config.exe"
     End If
     
    End Sub

    segunda-feira, 12 de março de 2012 10:45

Respostas

  • Marcelo,

    Veja que adicionei o "on error resume next" antes de ler a chave (para não parar caso houver erro) e depois de ler eu liguei novamente a parada em caso de erro (on error goto 0), caso a chave não exista strConsulta retorna como Nula, eu coloquei um if para veririficar o valor e caso for nulo eu transformo em "0", agora vc tem ovalor "0" para a versão do software caso ele não estiver instalado.

    Set oReg=GetObject("winmgmts:\\" & _
       strComputer & "\root\default:StdRegProv")
    on error resume next
    oReg.GetStringValue HKLM,"SOFTWARE\MicroSiga\","Controle", strConsulta
    on error goto 0
    if isnull(strConsulta) then strConsulta="0"
    
    Select Case strConsulta
    	Case "V1.1"
    		Exec01
    	Case "0"
    		Exec02
    End Select


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI segunda-feira, 12 de março de 2012 13:41
    segunda-feira, 12 de março de 2012 11:41
    Moderador

Todas as Respostas

  • Marcelo,

    Veja que adicionei o "on error resume next" antes de ler a chave (para não parar caso houver erro) e depois de ler eu liguei novamente a parada em caso de erro (on error goto 0), caso a chave não exista strConsulta retorna como Nula, eu coloquei um if para veririficar o valor e caso for nulo eu transformo em "0", agora vc tem ovalor "0" para a versão do software caso ele não estiver instalado.

    Set oReg=GetObject("winmgmts:\\" & _
       strComputer & "\root\default:StdRegProv")
    on error resume next
    oReg.GetStringValue HKLM,"SOFTWARE\MicroSiga\","Controle", strConsulta
    on error goto 0
    if isnull(strConsulta) then strConsulta="0"
    
    Select Case strConsulta
    	Case "V1.1"
    		Exec01
    	Case "0"
    		Exec02
    End Select


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI segunda-feira, 12 de março de 2012 13:41
    segunda-feira, 12 de março de 2012 11:41
    Moderador
  • Ba Fabio.

    O on error goto 0 quer dizer que se ele nao tiver a chave no registro ele vai executar a Case "0" ?

    Obrigado.

    segunda-feira, 12 de março de 2012 13:36
  • Por padrão o script para quando acontece algum erro (exemplo, 1/0 - divisão por zero), com o comando "on error resume next" o script desconsidera a linha do erro e segue em diante. o comando "on error goto 0" volta ao estado padrão.

    Quando não existe a chave ele dá erro na linha que busca a chave então usei o on errer resume next para passar pelo erro e logo em seguinda usei o on error goto 0 para voltar ao estado padrão. Mas após passar disto a variavel strRetorno tem o valor Nulo então eu verifico se ela tem o valor Nulo e troco nulo por "0", se não for Nulo eu não faço nada.


    Fábio de Paula Junior

    segunda-feira, 12 de março de 2012 16:20
    Moderador
  • Ba tche tree legal..

    Obrigado pela ajuda e pela aula.

    segunda-feira, 12 de março de 2012 19:39