Search code examples
windowsauthenticationexeinno-setupupn

Get User Principal Name (UPN) In InnoSetup Installer?


Within the InitializeSetup() function among other actions, when the installer is ran, I would like the installer to retrieve the current UPN. The UserName variable is not sufficient enough. I have also tried methods discussed here utilizing the WTSQuerySessionInformation() function but they don't seem to return what I am looking for. Depending on the organization and setting the UPN should often return some sort of an email address which I am looking for. Can someone shed some light on how to return the full UPN value as a string? Thank you.

EDIT:

I have also tried the GetUserNameExW() function passing in value 8 as an input which refers to UserNamePrincipal, however I am returning an empty value it seems.

function GetUserNameExW(NameFormat: Integer; lpNameBuffer: string; var nSize: DWORD): Boolean;
  external 'GetUserNameExW@secur32.dll stdcall';
var
  NumChars: DWORD;
  OutStr: string;
  name: string;

begin
  SetLength(OutStr, NumChars);
  GetUserNameExW(8, OutStr, NumChars);
  name := Copy(OutStr,1,NumChars);

Solution

  • I have managed to the solve this issue myself but still not 100% sure on why my previous iteration resulted in odd behavior.

    Essentially, I had to add an if check before:

    if GetUserNameExW(8, OutStr, NumChars) then