Я создаю установщик 7zip sfx в последней версии Windows 10, который, как ожидается, запустит сценарий powershell. когда извлечение завершено, окно powershell отображается, но быстро закрывается без выполнения скрипта.
Любая помощь высоко ценится!
Я попытался подписать файл сценария и сам файл installer.exe самоподписанным сертификатом, но безуспешно.
Я изменил Powershell ExecutionPolicy на Unrestricted для всех областей устранения неполадок, но тоже не повезло
Я использую монитор процесса в sysinternals, чтобы зафиксировать поведение powershell.exe, и обнаружил, что powershell начинает выходить из потока после чтения и записи c:\Users\xxx\AppData\Local\Microsoft\Windows\PowerShell\StartupProfileData-Interactive
Вот мой config.txt для 7zip sfx:
;!@Install@!UTF-8!
Title = "Cloud API"
BeginPrompt = "Do you want to install Cloud API?"
RunProgram = "powershell.exe -NoExit –NoProfile -ExecutionPolicy Bypass -File %%T\\cloud_api\\installer.PS1"
Directory = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\"
;!@InstallEnd@!
Я заархивирую файлы в python:
..\\7zr a -sfx7zSD.sfx cloud-api.7z .\\cloud-api -r -y
Я ожидаю, что installer.PS1 запустится после распаковки, но только powershell.exe запустится и быстро завершится без запуска скрипта.
Спасибо @root за вашу помощь. Я только что дважды проверил путь к installer.PS1 и обнаружил, что он неверен. После того, как я исправил это, он был выполнен, как и ожидалось. Не могли бы вы добавить свой комментарий в качестве ответа для подтверждения? Еще раз спасибо!
Превосходно. Я рад, что смог помочь.
Первым шагом к устранению этой проблемы будет объявление полного пути к скрипту .ps1
в конфигурации 7zip. Это гарантирует, что вы вызываете сценарий, который собираетесь запустить.
Я попробовал полный путь к файлу сценария. Это не работает. Сценарий powershell является одним из файлов в 7Z exe. Похоже, что 7Zip EXE пытается запустить команду перед извлечением файлов. Когда выполнение завершено, у меня нет файлов в папке, в которой я запускал exe. В документации предполагается, что %%T является временной папкой, в которую извлекаются файлы.
Вы пытались объявить полный путь к файлу
.ps1
? Также подумайте о том, чтобы поставитьpause
в конце скрипта. Если он действительно вызывается, открывающееся окно PS должно приостановиться перед закрытием.