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 .
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 .
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
WScript.Echo
e aprintMsg
(que parece não ter correspondênciaSub
então irá falhar com um erro se for chamado) e então executá-lo comwscript
? Isso impediria a exibição de uma janela de comando - o que pode estar acionando o pop-up.objTarget.CopyHere
ligar.