Search code examples
c#wixwindows-installerwixsharp

Set default installation directory depending on rights


I'm trying to use Wix# to build an MSI installer and I'm quite satisfied with the easy-to-use syntax compared to Wix.

Now, I'm trying to do something off-standard and I'm a bit lost, as I'm not really acquainted with Wix.

Basically, I wanted to set the default target installation directory depending if the installer was called with admin rights or being installed by a default user.

Being a normal user I want to set the default installation directory to %LocalAppData%\MyProduct, whereas as an admin the default installation directory should be %ProgramFiles%.

Using plain Wix there seems to be an solution, that is managable.

How, can this be accomplished by using Wix#?

I have to mention, that I'm really laking the skills to do so alone, as I neither really know WiX, Msi and even C# in any kind of depths. Hence, I'm looking for a minimal, reproducible solution of my problem.


Solution

  • In the example you linked (by the author of WiX) it shows how to set the directory depending if per user or per machine:

    <DirectoryRef Id="TARGETDIR">
        <Directory Id="ApplicationFolder" Name="App" />
    </DirectoryRef>
    

    If its an Admin install its Per-Machine, if its non-admin the default is Per User:

    <CustomAction Id="PerMachineInstall" Property="ApplicationFolder" Value="[ProgramFilesFolder]\[ApplicationFolderName]" Execute="immediate" />
    <CustomAction Id="PerUserInstall" Property="ApplicationFolder" Value="[LocalAppDataFolder]\Apps\[ApplicationFolderName]" Execute="immediate" />
    

    You should be able to change [LocalAppDataFolder]\Apps\[ApplicationFolderName] to [LocalAppData]\MyProduct

    The problem with the code is that the <Directory Id="ApplicationFolder" is lower case.

    As per https://wixtoolset.org/documentation/manual/v3/xsd/wix/setdirectory.html

    The directory ID must be all uppercase characters because it must be passed from the UI to the execute sequence to take effect.

    Related: Wix - Setting Install Folder correctly