Comment exécuter une action custom Windows Installer avec des privilèges élevés ?
Par défaut, lors du déploiement, une action custom s'exécute avec les privilèges de l'utilisateur courant. Celle-ci ne dispose d'aucun privilège administrateur. Le fait de fixer un scope
perMachine
comme ceci ne suffit pas :
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Package
Name="..."
Scope="perMachine">
Une solution peut consister dans le fait de d'utiliser un terminal avec une élévation de privilège pour lancer msiexec (msiexec /i mon-fichier.msi).
Heureusement WiX Toolset, permet de demander à Windows Installer d'exécuter une action custom avec des privilèges élever facilement. Pour cela, il faut utiliser l'option deferred
pour la propriété Execute
, et no
pour la propriété Impersonate
. La raison de ce changement est expluqée ici : Immediate Custom Actions Always Impersonate - Visual Studio Setup (microsoft.com)
Exemple :
<!-- Actions personnalisées -->
<Binary
Id="CustomActions"
SourceFile="CustomActions.CA.dll"/>
<CustomAction Id="DoSomething"
BinaryRef="CustomActions"
DllEntry="DoSomething"
Return="check"
Execute="deferred"
Impersonate="no"/>
Bien évidemment, l'action custom DoSomething
doit être présente dans la séquence InstallExecuteSequence
. Son exécution doit être planifiée entre InstallExecute
, et InstallFinalize
.
<InstallExecuteSequence>
<Custom Action="DoSomething" Before="InstallFinalize" />
</InstallExecuteSequence>
Après avoir appliqué ces modifications, l'action custom s'exécutera toujours avec des privilèges élevés.