13
votes

I created an MSI with WIX that needs elevated permissions to work correctly. In the MSI Project, I specified this via

<Package [...] InstallPrivileges="elevated" />

Now I included this MSI in a custom bootsrapper project, based on WixWPF Bootstrapper. As I understand it, the bootstrapper itself should not alter the machine state and thus should not require elevated privileges.

I would now expect the Bootstrapper to automatically launch the integrated MSI with elevated priviliges, prompting the user with a UAC dialog, if necessary. But it does not. Instead, the installation just fails. It works however, when I run the bootstrapper executable explicitly as administrator.

How do I make the bootstrapper ask for elevated permissions when installing the MSI?

1
Just to know, have you set this attribute for your MSI? InstallScope="perMachine"Isaiah4110
@Isaiah4110 I did not have set that attribute; I will check tomorrow if that makes any difference, as I have no access to my project right now. Thanks!Dennis
@Isaiah4110 Thanks, that was it! If you post this as an answer, I will be happy to accept it.Dennis
Sure, I will do that. Glad it worked.Isaiah4110

1 Answers

19
votes

Since the INSTALLSCOPE attribute for the MSI was not set, it defaulted to Per-User install and the bootstrapper application considered that it does not need any ADMIN/Elevated rights to run it.

Now in your case, you are the author of the MSI and it was easy enough for you to add the InstallScope to the package element.

InstallScope="perMachine" 

If you are not the author of the MSI, still bootstrapper provides a property which you can use to force the per-machine for the MSI/EXE.

  1. MSIPackage - ForcePerMachine
  2. EXEPackage - PerMachine

So why does Bootstrapper think that Per-Machine install needs elevated privileges and Per-User doesnt? Simple enough, per-user installation the registry value is written under HKEY_CURRENT_USER and for Per-machine installation the registry value is written under HKEY_LOCAL_MACHINE. Only Admin users can read/write to HKLM.