2

подробности

  • ОС: Windows 7
  • UAC: отключено
  • Что: я запускаю VBScript, который извлекает zip-файл, и vbscript запускается службой Jenkins. Мне нужно использовать VBScript, и я не могу использовать внешние инструменты, которые не существуют в чистой установке Windows.
  • Проблема: если служба работает как NT Authority\SYSTEM ИЛИ как локальный администратор, я получаю сообщение об ошибке на экране, связанное с распаковкой vbscript. Запуск скрипта от имени текущего пользователя не вызывает никаких проблем. Сообщение об ошибке называется «Обнаружение интерактивных служб». Текст диалога говорит, что программа, запущенная на этом компьютере, пытается отобразить сообщение. Первый диалог, который появляется

Если вы нажмете "просмотреть сообщение", вы получите очень старый вид диалогового окна: Доступ к папке запрещен с текстом Вам необходимо предоставить разрешение администратора для копирования этой папки. Второй диалог, который появляется

Кажется, что это как-то связано с UAC, за исключением того, что UAC предположительно отключен.

  • Автор сценария:


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

0