Extraindo um arquivo zip via VBScript sendo executado como um serviço

2

Detalhes

  • SO: Windows 7
  • UAC: desativado
  • O que: Estou executando um VBScript que extrai um arquivo zip e o vbscript é iniciado pelo serviço Jenkins. Eu preciso usar o VBScript, e eu não posso usar ferramentas externas que não existem em uma instalação limpa do Windows.
  • Problema: Se o serviço está sendo executado como NT Authority \ SYSTEM OR como administrador local, recebo uma mensagem de erro na tela relacionada à descompactação do vbscript. Executar o script como o usuário atual não produz nenhum problema. Mensagem de erro é intitulado: Detecção de serviços interativos. O texto da caixa de diálogo diz Um programa em execução neste computador está tentando exibir uma mensagem . First Dialog that appears

Se você clicar em "exibir a mensagem", verá uma caixa de diálogo muito antiga, com o nome: Acesso de pasta negado com o texto Você precisará fornecer permissão de administrador para copiar esta pasta . Second Dialog that appears

Parece que, de alguma forma, o UAC está relacionado, exceto que o UAC é supostamente desativado.

  • Roteiro:


Const noProgressYesAll = &H14

Dim objFSO
Set objFSO = CreateObject("scripting.filesystemobject")

zipFile = "C:\test.zip"
unzipPath = "C:\test\"
WScript.Echo "ZIPEXTRACTDIR: " & unzipPath 
WScript.Echo "ZIPFILE: " & zipFile

If objFSO.FileExists(zipFile) Then
    If objFSO.FolderExists(unzipPath) Then
        Set objShell = CreateObject( "Shell.Application" )
        Set objSource = objShell.NameSpace(zipFile)
        If objSource is Nothing Then
            printMsg "Invalid Zip File " & zipFile
        Else
            unzipLog = zipFile&".log"
            printMsg "Logging to " & unzipLog
            Set objLog = objFSO.OpenTextFile(unzipLog,fsoForWriting,True)
            Set objTarget = objShell.NameSpace(unzipPath)
            objTarget.CopyHere objSource.Items, noProgressYesAll
            For Each item in objSource.Items
                printMsg "Extracted: " & unzipPath&item.Name
                        objLog.Write unzipPath&item.Name & vbCrLf
                        If objFSO.FileExists(unzipPath&item.Name) Then
                    printMsg "Verified File: " & unzipPath&item.Name
                Else
                    If objFSO.FolderExists(unzipPath&item.Name) Then
                        printMsg "Verified Folder: " & unzipPath&item.Name
                    End If
                End If
            Next
            objLog.Close
        End If
    Else
        printMsg "Directory does not exist: " & unzipPath
    End If
Else
    printMsg "Zip file does not exist: " & zipFile
End If
Set objLog = Nothing
Set objSource = Nothing
set objShell = Nothing
set objTarget = Nothing

NGaida
fonte
Você tem um bom número de WScript.Echo, que tentaria exibir uma janela pop-up.
Richard
Eu suponho que eu deveria ter acrescentado: está sendo executado w / cscript, então toda saída é colocada na janela de comando, não como um popup.
NGaida
Você já tentou comentar o WScript.Echo e a printMsg (que parece não ter correspondência Sub então irá falhar com um erro se for chamado) e então executá-lo com wscript? Isso impediria a exibição de uma janela de comando - o que pode estar acionando o pop-up.
Richard
Sim. Esqueci de incluir a rotina printMsg, que para essa instância é um WScript.Echo.
NGaida
@Richard No entanto, não está causando esse problema; o erro mostra claramente que é um problema de permissão com o objTarget.CopyHere ligar.
NGaida