Search code examples
inno-setuppascalscript

Inno Setup Get default browser


I have a software which requires the default browser installed on user computer.

Is there a way that I can get it?

Thanks


Solution

  • An solution that correctly works on modern versions of Windows cannot be based on association with http protocol, as that's no longer reliable. It should rather be based on a solution like the answer by @GregT to How to determine the Windows default browser (at the top of the start menu).

    So something like:

    function GetBrowserCommand: string;
    var
      UserChoiceKey: string;
      HtmlProgId: string;
    begin
      UserChoiceKey :=
        'Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice';
      if RegQueryStringValue(HKCU, UserChoiceKey, 'ProgId', HtmlProgId) then
      begin
        Log(Format('ProgID to registered for .html is [%s].', [HtmlProgId]));
        if RegQueryStringValue(HKCR, HtmlProgId + '\shell\open\command', '', Result) then
        begin
          Log(Format('Command for ProgID [%s] is [%s].', [HtmlProgId, Result]));
        end;
      end;
    
      { Fallback for old version of Windows }
      if Result = '' then
      begin
        if RegQueryStringValue(HKCR, 'http\shell\open\command', '', Result) then
        begin
          Log(Format('Command registered for http: [%s].', [Result]));
        end;
      end;
    end;
    

    If you want to extract browser path from the command, use a code like:

    function ExtractProgramPath(Command: string): string;
    var
      P: Integer;
    begin
      if Copy(Command, 1, 1) = '"' then
      begin
        Delete(Command, 1, 1);
        P := Pos('"', Command);
      end
        else P := 0;
    
      if P = 0 then
      begin
        P := Pos(' ', Command);
      end;
      Result := Copy(Command, 1, P - 1);
    end;
    

    (based on Executing UninstallString in Inno Setup)