При создании установщика для модификации игры может возникнуть необходимость обнаружить путь установки игры в реестре. Однако, игра может быть установлена через разные сервисы, такие как Steam или GOG, и путь установки может различаться в зависимости от сервиса. В этой статье мы рассмотрим, как обнаружить путь установки игры для различных сервисов и выбрать правильный путь в зависимости от наличия установленных версий.
Проблема
Пользователь хочет создать установщик для модификации игры и обнаружить путь установки игры в реестре. Однако, игра может быть установлена через Steam или GOG, и путь установки может различаться в зависимости от сервиса. Необходимо обнаружить путь установки для каждого сервиса и выбрать правильный путь в зависимости от наличия установленных версий.
Решение
Для решения этой проблемы можно использовать скриптовый константный вызов и функцию RegQueryStringValue в Inno Setup. Ниже приведен пример кода, который обнаруживает путь установки игры для Steam и GOG и выбирает правильный путь в зависимости от наличия установленных версий:
[Setup]
DefaultDirName={code:GetInstallationPath}
[Code]
var
InstallationPath: string;
function GetInstallationPath(Param: string): string;
begin
// Detected path is cached, as this gets called multiple times
if InstallationPath = '' then
begin
if RegQueryStringValue(
HKLM64,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150',
'InstallLocation', InstallationPath) then
begin
Log('Detected Steam installation: ' + InstallationPath);
end
else
if RegQueryStringValue(
HKLM32, 'SOFTWARE\GOG.com\Games\1196955511',
'path', InstallationPath) then
begin
Log('Detected GOG installation: ' + InstallationPath);
end
else
begin
InstallationPath := 'C:\your\default\path';
Log('No installation detected, using the default path: ' +
InstallationPath);
end;
end;
Result := InstallationPath;
end;
В этом примере мы используем функцию RegQueryStringValue для поиска пути установки игры в реестре для Steam и GOG. Если путь установки обнаружен для одного из сервисов, мы записываем его в переменную InstallationPath и выводим лог с сообщением об обнаружении установки. Если путь установки не обнаружен для ни одного из сервисов, мы устанавливаем путь установки по умолчанию и выводим лог с сообщением об использовании пути по умолчанию.
Подтвержденный ответ
Используйте скриптовый константный вызов и функцию RegQueryStringValue в Inno Setup для обнаружения пути установки игры для различных сервисов и выбора правильного пути в зависимости от наличия установленных версий. Пример кода приведен выше.
Альтернативный ответ
Другой подход к решению этой проблемы может заключаться в использовании различных скриптовых констант для обнаружения пути установки игры для каждого сервиса и выбор правильного пути в зависимости от наличия установленных версий. Однако, этот подход может быть более сложным и менее гибким, чем использование скриптового константного вызова и функции RegQueryStringValue.
Поиск местоположения игры в реестре: учет различных игровых сервисов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS