inno-setuppascalscript

Query list of Windows accounts in Inno Setup


In my Inno Setup project I need to allow the user to choose an account from the list of all local accounts on a custom page. The selected account will be used to install a service with custom credential. How can I make this?

Thank you in advance!


Solution

  • You can use WMI Win32_UserAccount class to query the list of accounts.

    [Run]
    Filename: sc.exe; Parameters: ... {code:GetAccount}
    
    [Code]
    
    var
      AccountPage: TInputOptionWizardPage;
    
    procedure InitializeWizard();
    var
      WMIService: Variant;
      WbemLocator: Variant;
      WbemObjectSet: Variant;
      I: Integer;
    begin
      Log('InitializeWizard');
      AccountPage := CreateInputOptionPage(
        wpSelectTasks, 'Service account', '',
        'Please select account for the service:', True, True);
    
      WbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      WMIService := WbemLocator.ConnectServer('localhost', 'root\CIMV2');
      WbemObjectSet :=
        WMIService.ExecQuery('SELECT * FROM Win32_UserAccount');
      if not VarIsNull(WbemObjectSet) then
      begin
        for I := 0 to WbemObjectSet.Count - 1 do
        begin
          AccountPage.Add(WbemObjectSet.ItemIndex(I).Caption);
        end;
        AccountPage.SelectedValueIndex := 0;
      end;
    end;
    
    function GetAccount(Param: string): string;
    var
      I: Integer;
    begin
      for I := 0 to AccountPage.CheckListBox.Items.Count - 1 do
      begin
        if AccountPage.Values[I] then Result := AccountPage.CheckListBox.Items[I];
      end;
    end;
    

    enter image description here


    Related questions: