none
Verificar a existencia de um problema pelo seu executável. RRS feed

  • Pergunta

  • Ba galera alguém pode me dar uma força tche.

    Eu estava tentando usar a classe WMI WIN32_Product, porem a mesma não esta me respondendo se a maquina possui o aplicativo Extra instalado ou não, por este motivo estou tentando fazer por verificação da existência do arquivo tche, porem se eu passar o caminho completo o código abaixo esta rolando legal porem no meu parque tenho instalação em alguns caminhos diferentes, e eu gostaria da ajuda da galera para poder montar o arry pois não estou conseguindo tche.

     

    Obrigado.

     

    Código.

    strProgramFiles = objShell.ExpandEnvironmentStrings("%ProgramFiles%")
    strProgramFilesx86 = objShell.ExpandEnvironmentStrings("%ProgramFiles(x86)%")
    arrPastas = Array(strProgramFiles,strProgramFilesx86)
    
    For Each Pasta In arrPastas
        ScanDirectory(objFSO.GetFolder(Pasta))
    Next
    
    strprodextra = Pasta & "\extra.exe"
    
    WScript.Echo strprodextra
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    If Not objFSO.FileExists(strprodextra) Then
     	Strextra = "-"
     Else
    	strextra = "EXTRA! for SNA Server 32-bit"
    End If
    
    WScript.Echo strextra

    quarta-feira, 22 de janeiro de 2014 19:47

Respostas

  • Boa Noite Marcelo,

    Então existe duas possibilidades que voce pode testar

    1º Pesquisar pelo regedit, na chave SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, onde é criado a chave de desinstalação, voce informa o displayname do software, no entanto é necessário verifcar no win64 e se necessario adequar..

    Obs: o Display tem que ser identico ao da chave do Registro

    On Error Resume Next
    Const HKLM=&H80000002
    Set oReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
    Set oShell = Wscript.CreateObject("Wscript.Shell")
    Aplication = "CDBurnerXP"
    strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    oReg.Enumkey HKLM , strKeyPath, arrSubKeys
    For Each SubKey In arrSubKeys
    	oReg.GetStringValue HKLM, strKeyPath & "\" & SubKey, "DisplayName", sDisplayName
    	If sDisplayName = Aplication Then
    		oReg.GetStringValue HKLM, strKeyPath & "\" & SubKey, "InstallLocation", sInstall
    		Exit For
    	End If
    Next
    
    If sInstall = "" Then
    	msgbox "Aplicação [" & Aplication &"] Não encontrada"
    Else
    	msgbox "Caminho de execução: " & sInstall
    End If

    2º Pelo processo e execuçao, é verificado se o processo esta em execucaçao, entao verifica o local de onde esta sendo executado...

    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
    Aplication = "lync.exe"
    For Each objItem in colItems
    	If objItem.Name = Aplication then
    		sInstall = replace(objItem.ExecutablePath,Aplication,"")
    	End if
    Next
    If sInstall = "" Then
    	msgbox "Aplicação [" & Aplication &"] Não encontrada"
    Else
    	msgbox "Caminho de execução: " & sInstall
    End If

    verifica se te ajuda...

    att, Aparecido Deveza

    • Marcado como Resposta Marcelo TI quinta-feira, 23 de janeiro de 2014 12:21
    quinta-feira, 23 de janeiro de 2014 03:03

Todas as Respostas

  • Boa Noite Marcelo,

    Então existe duas possibilidades que voce pode testar

    1º Pesquisar pelo regedit, na chave SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, onde é criado a chave de desinstalação, voce informa o displayname do software, no entanto é necessário verifcar no win64 e se necessario adequar..

    Obs: o Display tem que ser identico ao da chave do Registro

    On Error Resume Next
    Const HKLM=&H80000002
    Set oReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
    Set oShell = Wscript.CreateObject("Wscript.Shell")
    Aplication = "CDBurnerXP"
    strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    oReg.Enumkey HKLM , strKeyPath, arrSubKeys
    For Each SubKey In arrSubKeys
    	oReg.GetStringValue HKLM, strKeyPath & "\" & SubKey, "DisplayName", sDisplayName
    	If sDisplayName = Aplication Then
    		oReg.GetStringValue HKLM, strKeyPath & "\" & SubKey, "InstallLocation", sInstall
    		Exit For
    	End If
    Next
    
    If sInstall = "" Then
    	msgbox "Aplicação [" & Aplication &"] Não encontrada"
    Else
    	msgbox "Caminho de execução: " & sInstall
    End If

    2º Pelo processo e execuçao, é verificado se o processo esta em execucaçao, entao verifica o local de onde esta sendo executado...

    Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
    Aplication = "lync.exe"
    For Each objItem in colItems
    	If objItem.Name = Aplication then
    		sInstall = replace(objItem.ExecutablePath,Aplication,"")
    	End if
    Next
    If sInstall = "" Then
    	msgbox "Aplicação [" & Aplication &"] Não encontrada"
    Else
    	msgbox "Caminho de execução: " & sInstall
    End If

    verifica se te ajuda...

    att, Aparecido Deveza

    • Marcado como Resposta Marcelo TI quinta-feira, 23 de janeiro de 2014 12:21
    quinta-feira, 23 de janeiro de 2014 03:03
  • Bom dia grande Jedi.

    Ba, ajuda de mais, a unica questão é que o de processo só vou conseguir pegar se ele estiver em execução mas o do registro atende, eu criei um If tche para ver a arquitetura do SO caso seja 64 mando para chave do 64 caso 32 mando para do 32 tche, muito obrigado pela força.

    quinta-feira, 23 de janeiro de 2014 12:21