uses
ShellAPI;
function InstallINF(const PathName: string; hParent: HWND): Boolean;
var
instance: HINST;
begin
instance := ShellExecute(hParent,
PChar('open'),
PChar('rundll32.exe'),
PChar('setupapi,InstallHinfSection DefaultInstall 132 ' + PathName),
nil,
SW_HIDE);
Result := instance > 32;
end; { InstallINF }// Example:procedure TForm1.Button1Click(Sender: TObject);
begin
InstallINF('C:\DelphiWorld.inf', 0);
end;
Here's the translation of the text into Russian:
Функция InstallINF в этом коде предназначена для установки файла INF (информационного файла), который используется Windows Setup API для установки драйверов устройств и других системных компонентов.
Вот, как функция работает:
Функция ShellExecute вызывается с несколькими параметрами:
hParent: Обратный handle окна родительского окна.
PChar('open'): Глагол (действие), которое должно быть выполнено, в этом случае - "открыть".
PChar('rundll32.exe'): Исполнимый файл, который будет выполнять действие. В этом случае это системный исполнительный файл, используемый для запуска динамических связок (.dll).
PChar('setupapi,InstallHinfSection DefaultInstall 132 ' + PathName): Это аргумент командной строки. Он указывает файлу rundll32.exe, чтобы использовать библиотеку setupapi.dll и выполнить функцию InstallHinfSection с указанными аргументами.
nil: Рабочая директория для приложения.
SW_HIDE: Флаг, указывающий, как должен быть отображен создаваемое окно. В этом случае он установлен в SW_HIDE, что означает, что окно будет скрыто.
Результат вызова функции ShellExecute хранится в переменной instance.
Функция затем проверяет, является ли результат больше 32, и возвращает это значение как возвращаемое значение функции InstallINF.
Пример в конце демонстрирует, как использовать функцию InstallINF, вызывая ее с путем к файлу INF ('C:\DelphiWorld.inf') и передавая handle основного окна (0) как handle родительского окна.
Этот код может использоваться в приложении Delphi для программной установки файла INF. Однако важно отметить, что функция ShellExecute может не работать корректно, если пользователь не имеет необходимых прав на установку файла INF. Кроме того, это код предполагает, что файл INF находится на локальной системе и имеет правильные права на установку.
Вот некоторые альтернативы:
Вместо использования ShellExecute, можно использовать функцию CreateProcess или компонент TProcess в Delphi для прямого запуска библиотеки setupapi.dll.
Можно также использовать функции Windows Setup API, такие как SetupCopyOEMInf или SetupInstallFile, для программной установки файла INF.
Вот пример, как можно модифицировать код с помощью CreateProcess:
procedure TForm1.Button1Click(Sender: TObject);
var
si: TStartupInfo;
pi: TProcessInformation;
begin
FillChar(si, SizeOf(TStartupInfo), 0);
si.cb := SizeOf(TStartupInfo);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_RUNFULLSCREEN;
si.wShowWindow := SW_HIDE;
FillChar(pi, SizeOf(TProcessInformation), 0);
if CreateProcess(nil, PChar('rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 ' + 'C:\DelphiWorld.inf'), nil, nil, False, 0, nil, nil, si, pi) then
Result := True;
else
Result := False;
end;
Этот код похож на оригинальный вызов ShellExecute, но использует функцию CreateProcess вместо нее. Он создает новый процесс, который запускает файл rundll32.exe с указанными аргументами и ожидает завершения процесса перед возвращением результата.
В статье рассмотрено, как инсталлировать файл INF с помощью функции InstallINF на языке программирования Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.