3

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

+0

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? –

+0

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

+0

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. –

Répondre

2

Ceci est l'un de ces moments où la solution est plus facile juste pour planifier un redémarrage.

1

Voici quelques possibilités:

  • Si possible, ne pas installer des ensembles de pré-requis dans le GAC. Cela permettra à votre service d'être démarré normalement (c'est-à-dire entre InstallInitialize et InstallFinalize).

  • Créez un programme d'amorçage (une petite application qui lance les MSI prérequis dans un certain ordre). Placez les assemblys prérequis (ceux qui vont dans le GAC) dans leur propre MSI et demandez au programme d'amorçage de les installer avant d'installer votre service.

  • Créez un lanceur (une application encore plus petite qui lance simplement votre MSI). Donnez-lui un manifeste qui le rendra élevé. De cette façon, le MSI entier est élevé, pas seulement la partie située entre InstallInitialize et InstallFinalize. Vous devriez pouvoir appeler sc avec succès.

1

Je suis d'accord avec @sascha. Le redémarrage n'est pas seulement le plus simple mais le plus propre dans ce cas. Toutes les autres solutions proposées vont vous mettre en place pour un taux d'échec beaucoup plus élevé à l'avenir. À mon humble avis, la conception de Windows Installer w.r.t. le GAC est éclaté. Le redémarrage est la reconnaissance de cela.

Questions connexes