Я выполняю службу 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())
}
}
Я подозреваю это, потому что его выполнение при сервисном процессе, который является бездисплейным (никакое взаимодействие с рабочим столом), его так или иначе застрявшая попытка отобразить диалоговое окно.
Существует ли путь вокруг этого?
Забудьте скрыть его в коде. Это только усложнит чтение, отладку и обслуживание программного обеспечения. Вы также будете прибиты, если ваше программное обеспечение будет проходить проверку безопасности.
Если вы не можете поместить ключ в безопасное место хранения (защищенное на диске, защищенной памяти или парольной фразы в головке), не утруждайте себя ничем другим.
Если вы находитесь в среде * nix, сохранение ключа на диске с разрешениями root/root 400 может быть «достаточно хорошим».
В Windows для хранения данных в защищенной памяти Microsofts можно использовать DPAPI.
Можно также использовать облегченный PBE для шифрования конфиденциального ключа и ввода пользователем парольной фразы при запуске приложения.
-121--3713379-Вы смотрели на Swig ?
-121--2467955-С учетом документации по PowerShell, вариант -NonInteractive может помочь здесь
Если это работает на Vista или Windows 7, появится UI от службы, не будет замечена конечным пользователем, как вы подозреваете. Увидеть эту статью на сеанс 0 изоляции . Однако диалоговое окно прогресса требует пользовательского ввода? Если нет, я бы не подумал, что это приведет к зависанию службы. Я бы искал возможность отключить дисплей прогресса. Если вы не можете найти это, то попробуйте переключиться на другой zip-экстрактор. PSCX 1.2 поставляется с командлетом расширенного архива. Я уверен, что есть также другие доступны.