开发者

WiX installer should always run as administrator

I developed a custom installer with WiX for a .NET WPF application. It works fine if I right-click and run as administrator, however when running without, some co开发者_如何学Cmponents fail to install due to insufficient privileges.

The components include SQL Server Express 2008 R2, FoxIt Reader, an ActiveX component and some others. It also requires that some SQL scripts are ran on the newly installed database - anyway, they all require administrator privileges.


I tried adding the InstallScope="perMachine" and InstallPrivileges="elevated" attributes to the Package node, but this didn't seem to make a difference.

I'm sure it's something silly, but I couldn't find anything in the reference or online.


I think if you just add

<Property Id="MSIUSEREALADMINDETECTION" Value="1" />

it should solve the problem. Let me know if not and I can do some more checking.


Add this to your package element

<Property Id="ALLUSERS" Value="1" />    <!--equals to install="permachine" at package element but this element depricated -->
<Property Id="MSIUSEREALADMINDETECTION" Value="1" /> 

<Condition Message="Please Run as Administrator.">
      Privileged
</Condition>

Then creating a simple sfx archive file for msi file with Winrar and these options:

  • Setup tab > Run after execution input: your msi file name

  • Advanced tab > Mark Request Administrative access option checkbox


For me I was supposed to run a registry command to delete a system environment variable via the CustomAction WiX element, which required administrator privileges.

Using CustomAction → Impersonate="no" worked for me as mentioned in post https://stackoverflow.com/a/8657472/3205679.

WiX Custom Action code:

<CustomAction Id = "Uninstall_MYSYSENV"
              Directory  = "INSTALLFOLDER"
              ExeCommand = 'cmd.exe /c &quot;reg delete       "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session    Manager\Environment" /v MYSYSENV /f&quot;'
              Execute    = "deferred"
              Impersonate= "no"
              Return     = "asyncNoWait"
              />

<InstallExecuteSequence>
      <Custom Action="Uninstall_MYSYSENV"
              After="InstallInitialize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜