Below I provided the source code of WIX installer that shows the license, installation directory and runs custom actions on install and uninstall:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="My Game" Language="1033" Version="1.0.0.0" Manufacturer="SharLines Corporation" UpgradeCode="...">
...
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" ></Property>
<WixVariable Id="WixUILicenseRtf" Overridable="yes" Value="License.rtf"/>
<UIRef Id="WixUI_InstallDir"/>
<InstallExecuteSequence>
<Custom Action="InstallService" After="InstallFiles">(NOT Installed) AND (NOT REMOVE)</Custom>
<Custom Action="UninstallService" After="InstallInitialize">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
</InstallExecuteSequence>
<CustomAction Id="InstallService" Return="check" Impersonate="yes" Execute="deferred" Directory="INSTALLFOLDER" ExeCommand="[INSTALLFOLDER]$(var.MyService.TargetFileName) parameters..."/>
<CustomAction Id="UninstallService" Return="check" Impersonate="yes" Execute="deferred" Directory="INSTALLFOLDER" ExeCommand="[INSTALLFOLDER]$(var.MyService.TargetFileName) parameters..."/>
</Product>
...
</Wix>
MyService is project referenced by my wixproj in VS2015. If Impersonate=”yes” the command is run as the current user, if “no”, the command is run as “NT AUTHORITY\SYSTEM“. INSTALLFOLDER is defined as follows:
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="PrmServerSetup" />
</Directory>
</Directory>
</Fragment>
Also there is a typical fragment that copies the files:
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="ProductComponent">
<File Id="MyService" Name="$(var.MyService.TargetFileName)" Source="$(var.MyService.TargetPath)" DiskId="1" />
</Component>
...
</ComponentGroup>
</Fragment>
I used the following C# code to determine what user the action is run under:
class Program
{
static int Main(string[] args)
{
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
using (StreamWriter writer = new StreamWriter(@"C:\work\SetupLog.txt"))
{
writer.WriteLine("User: {0}", userName);
}
return 0;
}
}

