Как получить путь установки целевой игры / приложения из реестра при установке мода / плагина с помощью Inno Setup? - PullRequest
1 голос
/ 13 июня 2019

Я бы хотел создать инсталлятор для мода игры.И мне нужно определить, где установлена ​​игра.Я знаю, где находится путь к игре в реестре.Но в игре могут быть другие лаунчеры - Steam, GOG.Как определить по порядку?

Например:

  • Если у меня версия steam, нужно определить путь установки из реестра для steam
  • Если у меня версия GOG, нужно определить путь установкииз реестра для GOG
  • Если у меня есть обе версии (Steam и GOG), то путь установки по умолчанию будет для steam версии
  • Если у меня нет версий, тогда пользователь сам выбирает пункт назначения

Ключи реестра:

  • Steam:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150] 
    "InstallLocation"="E:\\Games\\Software\\Steam\\steamapps\\common\\Titan Quest Anniversary Edition" 
    
  • GOG:

    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GOG.com\Games\1196955511] 
    "path"="D:\\Titan Quest GOG"
    

Я знаю, как обнаружить один путь

DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 475150, InstallLocation}

Но я не знаю, как обнаружить много путей.

1 Ответ

1 голос
/ 13 июня 2019

Используйте скриптовую константу и RegQueryStringValue функцию :

[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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...