При установке программного обеспечения часто требуется добавить путь к установленной директории в переменную среды PATH, чтобы приложение могло корректно работать. В этой статье мы рассмотрим, как это сделать с помощью Inno Setup, а также как правильно удалить путь из переменной PATH при удалении программы.
Обновление переменной PATH при установке
Для добавления пути к установленной директории в переменную PATH при установке программы используйте следующий код в секции [Registry] своего скрипта Inno Setup:
Функция NeedsAddPath проверяет, нужно ли добавлять путь в переменную PATH. Если путь уже присутствует, функция возвращает False, в противном случае – True.
[Code]
function NeedsAddPath(Param: string): boolean;
var
OrigPath: string;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
'Path', OrigPath)
then begin
Result := True;
exit;
end;
{ look for the path with leading and trailing semicolon }
{ Pos() returns 0 if not found }
Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
end;
Обновление переменной PATH при удалении программы
При удалении программы из системы нужно восстановить переменную PATH в прежнее состояние, то есть удалить путь, добавленный при установке. Для этого используйте флаг uninsdeletevalue в секции [Registry]:
Однако, простое удаление значения переменной PATH с помощью флага uninsdeletevalue не гарантирует, что переменная будет восстановлена в прежнее состояние. Чтобы правильно удалить путь из переменной PATH, используйте следующий код в секции [Code]:
const
EnvironmentKey = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
procedure RemovePath(Path: string);
var
Paths: string;
P: Integer;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then
begin
Log('PATH not found');
end
else
begin
Log(Format('PATH is [%s]', [Paths]));
P := Pos(';' + Uppercase(Path) + ';', ';' + Uppercase(Paths) + ';');
if P = 0 then
begin
Log(Format('Path [%s] not found in PATH', [Path]));
end
else
begin
Delete(Paths, P - 1, Length(Path) + 1);
Log(Format('Path [%s] removed from PATH => [%s]', [Path, Paths]));
if RegWriteStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then
begin
Log('PATH written');
end
else
begin
Log('Error writing PATH');
end;
end;
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
RemovePath(ExpandConstant('{app}'));
end;
end;
Теперь, при удалении программы, путь к установленной директории будет правильно удален из переменной PATH.
Заключение
Использование Inno Setup для установки программного обеспечения и обновления переменной среды PATH – это простой и эффективный способ гарантировать корректную работу приложения на целевом компьютере. Правильное удаление пути из переменной PATH при удалении программы также важно для поддержания системы в надлежащем состоянии.
В этом контексте описывается процесс использования Inno Setup для установки программного обеспечения и обновления переменной среды PATH, а также правильного удаления пути из переменной PATH при удалении программы.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS