Question

Comment pouvons-nous demander un redémarrage de l'ordinateur après l'installation à partir d'une action C # personnalisée?

Nous utilisons le projet d'installation de VS 2005 pour notre configuration, et nous devons décider par programme pour demander un redémarrage (il ne se produira pas sur tous les installer, juste quelques-uns).

Mise à jour: Nous sommes à la recherche de quelque chose qui est déjà intégré dans le système d'action personnalisé MSI premier. Si cela n'existe pas, on peut avoir recours à nous redémarrer le PC en quelque sorte, mais voudrions éviter cela.

Mise à jour: Nous voyons où vous pouvez définir REBOOT = force lors de l'édition Msi Orca, pouvez-vous modifier ces tables à partir d'un C # action personnalisée lors de l'exécution? Nous pourrions définir ce redémarrer à chaque fois, mais cela pourrait rendre notre configuration ennuyeux (il suffit de redémarrer de rares occasions).

Mise à jour: Nous avons essayé de réglage:

savedState["REBOOT"] = "Force";

A partir de la méthode de notre action personnalisée Install (), mais pas de chance. Il ne semble pas IDictionary, savedState fait vraiment quelque chose.

Aussi essayé:

Context.Parameters["REBOOT"] = "Force";

Mais je pense que cette collection est seulement les arguments de ligne de commande passée à l'action personnalisée.

MISE À JOUR: Est-il possible de modifier notre MSI avec Orca pour faire ce travail trick? Peut-être planifier un redémarrage sur une condition de certains fichier existant? Nous n'avons pas trouvé comment définir les propriétés d'un MSI C # action personnalisée.

Mise à jour. Nous avons essayé accrochage dans AppDomain.ProcessExit et AppDomain.DomainUnload et commencer un nouveau thread et appelant Process.GetCurrentProcess () WaitForExit () et aucun de ces événements dans un feu de l'action C # personnalisé ...

Était-ce utile?

La solution 2

Comme il semble, le seul moyen pour nous de résoudre ce problème est soit:

A) Modifier le MSI avec Orca pour faire le redémarrage de configuration pour chaque installation

B) Refaire le projet d'installation avec WiX ou Install Shield

Merci pour l'aide les gars.

Autres conseils

Vous devez ajouter ou appeler le ScheduleReboot d'action personnalisé MSI http://msdn.microsoft.com/en-us/library/aa371527 (VS.85) .aspx dans votre InstallExecuteSequence,. Vous pouvez le faire en utilisant la fonction MSI MsiDoAction, http: //msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx dans une action personnalisée. S'il vous plaît noter que l'action personnalisée qui planifie ce doit être une action personnalisée immédiate, et non une action personnalisée différée. Cela signifie que vous aurez probablement besoin de le programmer après InstallFinalize. Vous pouvez également l'ajouter à la InstallExecuteSequence avec une condition sur une propriété publique, tels que vos actions personnalisées.

Quand j'ai dû le faire avant que nous avons utilisé une fonction API Win32 de user32.dll, je pense que ça y était: ExitWindowsEx ()

LanceSc vous a donné la réponse. Vous devez exécuter ScheduleReboot, et la meilleure façon de le faire est de l'insérer dans la InstallExecuteSequence conditionnée par votre propre propriété personnalisée que vous définissez dans votre action personnalisée.

Comme vous le mentionnez, Wix est la voie à suivre pour une flexibilité future. Wix comprend maintenant DTF (outils de déploiement Foundation) est un riche ensemble de bibliothèques de classes .NET qui enveloppent l'ensemble API Windows. Vous pouvez l'utiliser pour accéder facilement à des bases de données MSI de C # ou C # pour écrire des actions personnalisées. Je peux fournir plus d'informations sur ce si cela est souhaitable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top