J'utilise WiX pour écrire un programme d'installation MSI afin de démarrer un service qui dépend des DLL installées par le MSI. Sur Vista, les DLL sont ajoutées au cache de l'assembly global dans la phase InstallFinalize
du MSI, donc je ne peux pas utiliser la commande de démarrage de service intégrée dans WiX. Celui-ci essaie de démarrer le service avant que les DLL soient dans le GAC et échoue. La solution semble être d'utiliser une action personnalisée à la place [1], et exécuter cela après InstallFinalize
.Lancement d'un service à partir de l'installateur msi qui dépend des assemblages installés par le msi
L'action personnalisée que j'ai utilisée commençait le service avec sc
. Tout fonctionne correctement lors de l'exécution du programme d'installation en tant qu'administrateur, mais l'exécution en tant qu'utilisateur normal ne fonctionne pas. Le programme d'installation élèvera les privilèges pour la phase d'installation réelle, mais les supprimera après la finalisation de l'installation et le démarrage du service avec sc
car un utilisateur non privilégié échouera. La définition de l'action personnalisée à différer et l'absence d'emprunt d'identité pour obtenir les privilèges d'administration ne fonctionneront pas non plus après InstallFinalize
[2]. En guise de dernier kludge, j'ai essayé d'ajouter <Condition>Privileged</Condition>
au fichier WiX pour indiquer à l'utilisateur que le programme d'installation doit être exécuté en tant qu'administrateur, mais je ne pouvais pas le faire fonctionner non plus. La valeur Privileged
est définie sur 1 lors de l'installation, peut-être lorsque la séquence d'installation principale est dotée de privilèges plus élevés.
Alors quelqu'un d'autre a-t-il rencontré la combinaison de Vista, utilisateur non administrateur, l'installateur a besoin de démarrer un service et des besoins de services qui vont dans GAC lors de l'installation? Y a-t-il une sorte d'approche générale de travail à cela?
[1] http://www.mail-archive.com/[email protected]/msg09162.html
[2] http://www.mail-archive.com/[email protected]/msg15381.html
Votre service peut-il être démarré avec des privilèges non-administratifs (c'est-à-dire par un utilisateur normal)? S'il s'agit d'un service système, ce n'est probablement pas le cas. Ou est-ce que je comprends mal votre problème et que vous installez en tant qu'administrateur mais que vous n'obtenez pas de jeton élevé pour démarrer le service? –
Le service doit faire les choses qui nécessitent des privilèges d'administrateur, donc non, il ne peut pas être exécuté par un utilisateur normal. Tout fonctionne lors de l'installation en tant qu'administrateur (par exemple, à partir d'une console Administrateur), le problème est qu'il fonctionne avec l'élévation de privilèges lors de l'exécution du programme d'installation en tant qu'utilisateur normal. – rsaarelm
Si le service nécessite des privilèges administratifs pour démarrer, un utilisateur normal ne pourra pas le démarrer, donc je suppose que vous n'avez pas de chance. –