Powershell, работающий под сервисом, зависает на *.zip CopyHere

Я выполняю службу Windows (Гудзон), который в свою очередь порождает процесс PowerShell для выполнения моих пользовательских команд PowerShell. Часть моего сценария должна разархивировать использование файла CopyHere. Когда я запускаю этот скрипт локально, я вижу диалоговое всплывающее окно прогресса, поскольку файлы извлечены и скопированы. Однако, когда это работает под сервисом, он зависает в точке, где диалоговое окно иначе появилось бы.

Вот разархивировать часть моего сценария.

# Extract the contents of a zip file to a folder
function Extract-Zip {
    param([string]$zipFilePath, [string]$destination)
    if(test-path($zipFilePath))     {   
        $shellApplication = new-object -com shell.application

        $zipFile = get-item $zipFilePath
        $zipFolder = $shellApplication.NameSpace($zipFile.fullname)

        $destinationFile = get-item $destination
        $destinationFolder = $shellApplication.NameSpace($destinationFile.fullname)

        $destinationFolder.CopyHere($zipFolder.Items())
    }
}

Я подозреваю это, потому что его выполнение при сервисном процессе, который является бездисплейным (никакое взаимодействие с рабочим столом), его так или иначе застрявшая попытка отобразить диалоговое окно.

Существует ли путь вокруг этого?

5
задан Trinition 5 February 2014 в 19:56
поделиться

2 ответа

Забудьте скрыть его в коде. Это только усложнит чтение, отладку и обслуживание программного обеспечения. Вы также будете прибиты, если ваше программное обеспечение будет проходить проверку безопасности.

Если вы не можете поместить ключ в безопасное место хранения (защищенное на диске, защищенной памяти или парольной фразы в головке), не утруждайте себя ничем другим.

Если вы находитесь в среде * nix, сохранение ключа на диске с разрешениями root/root 400 может быть «достаточно хорошим».

В Windows для хранения данных в защищенной памяти Microsofts можно использовать DPAPI.

Можно также использовать облегченный PBE для шифрования конфиденциального ключа и ввода пользователем парольной фразы при запуске приложения.

-121--3713379-

Вы смотрели на Swig ?

-121--2467955-

С учетом документации по PowerShell, вариант -NonInteractive может помочь здесь

1
ответ дан 14 December 2019 в 13:37
поделиться

Если это работает на Vista или Windows 7, появится UI от службы, не будет замечена конечным пользователем, как вы подозреваете. Увидеть эту статью на сеанс 0 изоляции . Однако диалоговое окно прогресса требует пользовательского ввода? Если нет, я бы не подумал, что это приведет к зависанию службы. Я бы искал возможность отключить дисплей прогресса. Если вы не можете найти это, то попробуйте переключиться на другой zip-экстрактор. PSCX 1.2 поставляется с командлетом расширенного архива. Я уверен, что есть также другие доступны.

2
ответ дан 14 December 2019 в 13:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: