2010-08-04 9 views
0

Je travaille sur le programme d'installation MSI qui installe et démarre le service. Il peut ou non remplacer les fichiers en cours d'utilisation. Quand c'est le cas, il y a une invite pour redémarrer la machine à la fin de l'installation.MSI: Démarrer le service sauf si l'utilisateur choisit de redémarrer la machine

Le service exécute une initialisation longue au premier démarrage, qui n'est pas souhaitable d'interrompre par l'arrêt. Ce que j'essaye de faire est d'empêcher le service de démarrer jusqu'à ce que l'on sache que l'installation est terminée, et qu'il n'y aura pas de redémarrage, par exemple: redémarrage inutile ou sélection par l'utilisateur pour retarder le redémarrage.

Bootstrapper est pas une option, tout doit être mis en œuvre à l'intérieur d'un MSI

Quelqu'un peut-il me conseiller, quelle est la meilleure façon de le faire?

+0

Est-ce vraiment important? Windows ne s'arrêterait-il pas et le démarrage de votre service serait annulé? Sans un bootstrapper, je doute qu'il soit facile de faire ce que vous voulez. Peut-être que l'utilisation d'une tâche planifiée pour démarrer le service retardé pourrait être une option cependant. –

Répondre

0

Je vais donner une réponse pragmatique mais pas parfaite ... Windows Installer n'a vraiment aucun moyen de prendre en charge cela, alors demandez une réinitialisation et ne possédez pas d'élément ServiceControl. Réglez simplement ServiceInstall sur Auto et laissez le redémarrage s'occuper du reste.

Je sais, j'essaie généralement d'éviter les redémarrages aussi, mais si vous en avez souvent besoin de toute façon, cela rend votre histoire plus simple. La seule autre chose à laquelle je peux vraiment penser est d'exposer un mécanisme RPC dans votre service (point de terminaison wcf par exemple) et d'avoir votre processus de longue durée seulement sur le deuxième démarrage du service ou lorsque ce rpc est invoqué la première fois. Ensuite, effectuez une action personnalisée à la fin du programme d'installation appelez le RPC si un redémarrage n'est pas nécessaire.

Je ne peux pas penser à un moyen de le faire nativement dans MSI.