Я пишу функцию, которая будет устанавливать необходимый компонент для моего устройства, которое построено на PowerShell. Если определенная версия PowerShell не найдена, я хочу, чтобы установщик помог пользователю установить ее. Проблема, с которой я сталкиваюсь, заключается в том, как правильно вызвать автономный установщик для установки. Вот код, у меня есть, что общая функция (я использую InnoSetup Dependency Installer):Inno Setup - Как установить Windows Install Offline Installer
function SmartExec(product : TProduct; var resultcode : Integer): boolean;
begin
if (LowerCase(Copy(product.File, Length(product.File) - 2, 3)) = 'exe') then begin
Result := Exec(product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end else begin
Result := ShellExec('', product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end;
end;
Я попытался с помощью следующих действий:
function SmartExec(product : TProduct; var resultcode : Integer): boolean;
begin
if (LowerCase(Copy(product.File, Length(product.File) - 2, 3)) = 'exe') then begin
Result := Exec(product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end else if (LowerCase(Copy(product.File, Length(product.File) - 2, 3)) = 'msu') then begin
Result := ShellExec('', 'wusa.exe ' + product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end else begin
Result := ShellExec('', product.File, product.Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, resultcode);
end;
end;
Когда я компилирую и протестировать программу установки , я поздоровался с:
Я передаю /quiet /norestart
как параметры файла MSU, которые отлично выполняются из командной строки.
Установочный файл загружается в %tmp%
для текущего пользователя, и я вижу файл.
Любая помощь или комментарии?
Хотя я согласен, я нужен отдельный еще, если филиал, чтобы определить, является ли расширение файла МГУ, мой инсталлятор загрузить файл, по-видимому, выполнить, но сразу в комплекте с окончательной «перезагрузки необходимого ". Я никогда не вижу wusa.exe в запуске Process Explorer, поэтому я добавил второй оператор 'else if'. Является ли 'resultcode' будет переменной, к которой я могу получить прямой доступ, или вместо этого посмотрим на' Result'? –
Nevermind. Я вижу, что 'resultcode' - это переменная, возвращаемая после завершения' Exec' или 'ShellExec'. Я добавил 'msgbox' сразу после операторов if, а' resultcode' - '3'. Кажется, я не могу понять, что означает «3», иначе, чем что-то не получилось. –
3 является 'ERROR_PATH_NOT_FOUND'. См. Мой отредактированный ответ. –