PS1, чтобы exe развертывание скрипта Powershell, не удается найти всю необходимую информацию - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать файл .exe, который будет запускать скрипт powershell, для которого мне нужно установить различные компоненты приложения. Я работаю над шагом 1 из 4, чтобы установить все это приложение, и хочу поместить его в один пакет. С этим не все в порядке. Я использую Ps1 для Exe по f2ko. Там нет документации, которую я могу найти на программное обеспечение, но он делает то, что я хочу. Проблема заключается в упакованных файлах и способах их запуска. Я сталкиваюсь с парой вопросов. Основная проблема, кажется, связана с Start-Process, когда exe работает, я получаю сообщение об ошибке

Start-Process : This command cannot be run completely because the system cannot find all the information required.
At C:\Users\adminjp\AppData\Local\Temp\2605.tml\2606.tmp\2607.ps1:9 char:16

Остальная часть ошибки скрыта в строке состояния установщика. Строка состояния работает, но процесс - нет. Первоначально у меня была проблема с ExecutionPolicy, но она устраняется путем ручного изменения значения для запуска сценария. У меня были многочисленные проблемы с запуском этого скрипта, и у меня заканчиваются статьи в Интернете, которые я не читал. Вот мой сценарий powershell:

Set-ExecutionPolicy -Force remotesigned

$NETfile = "env:p2eincfilepath\1 - NDP471-KB4033342-x86-x64-AllOS-ENU.exe"
$NETargs = "/q"
$SQLfile = "env:p2eincfilepath\setup.exe"
$SQLargs = "/ConfigurationFile=`".\ConfigurationFile_SQLExpress.ini`""

function Show-Progress ($file, $arguments, $component){
    $process = Start-Process $file $arguments -PassThru
    for($i = 0; $i -le 100; $i = ($i + 1) % 100)
    {
        Write-Progress -Activity "Installer" -PercentComplete $i -Status "Installing $component"
        Start-Sleep -Milliseconds 100
        if ($process.HasExited) {
            Write-Progress -Activity "Installer" -Completed
            break
        }
    }
}

Show-Progress $NETfile $NETargs ".NET 4.7.2"
Show-Progress $SQLfile $SQLargs "SQL Express"

Программа, которая преобразует этот скрипт в exe, - это то, что устанавливает место извлечения, и, насколько мне известно, я не могу установить это. Приложенный снимок экрана с их объяснением того, как ссылаться на вложенные файлы:

enter image description here

Я использую env:p2eincfilepath, потому что это метод powershell для доступа к переменным среды, и приложение, похоже, создает или использует переменную среды. Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация. Ps1, кажется, работает правильно, если я запускаю его непосредственно из powershell и помещаю файлы в корневой каталог, вызывая их с помощью ./. Мне бы очень хотелось, чтобы эта функция использовалась, так как это то, что дает мне строку состояния, позволяющую пользователю знать, что устанавливается:

enter image description here

1 Ответ

1 голос
/ 24 апреля 2019

Я думаю, вам нужно иметь знак $ перед переменной env для его заполнения. Например,

$NETfile = "$env:p2eincfilepath\1 - NDP471-KB4033342-x86-x64-AllOS-ENU.exe"
$NETargs = "/q"
$SQLfile = "$env:p2eincfilepath\setup.exe"
$SQLargs = "/ConfigurationFile=`".\ConfigurationFile_SQLExpress.ini`""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...