Extraer un archivo zip a través de VBScript ejecutándose como servicio

Extraer un archivo zip a través de VBScript ejecutándose como servicio

Detalles

  • Sistema operativo: Windows 7
  • UAC: deshabilitado
  • Qué: Estoy ejecutando un VBScript que extrae un archivo zip y el servicio Jenkins inicia el vbscript. Necesito usar VBScript y no puedo usar herramientas externas que no existen en una instalación limpia de Windows.
  • Problema: si el servicio se ejecuta como NT Authority\SYSTEM O como administrador local, aparece un mensaje de error en la pantalla relacionado con la descompresión de vbscript. Ejecutar el script como usuario actual no produce ningún problema. El mensaje de error se titula: Detección de servicios interactivos. El texto del cuadro de diálogo diceUn programa que se ejecuta en esta computadora está intentando mostrar un mensaje.Primer diálogo que aparece

Si hace clic en "ver el mensaje", aparecerá un cuadro de diálogo muy antiguo titulado:Acceso a la carpeta denegadocon el textoDeberá proporcionar permiso de administrador para copiar esta carpeta..Segundo diálogo que aparece

Parece que de alguna manera estaría relacionado con UAC, excepto que UAC supuestamente está deshabilitado.

  • Guion:


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

información relacionada