2010-11-01 9 views
0

Mon application d'installation bootstrap fait un tas d'appels MSI au début pour obtenir des informations du MSI (quelle (s) version (s) sont installée (s), quelles sont les fonctionnalités installées, les valeurs des propriétés, les chemins, etc.). Pendant que ces appels MSI sont en cours, le programme d'installation Windows lève une fenêtre avec un bouton Annuler. Mon code a des pièges partout pour vérifier si le code d'erreur renvoyé par un appel MSI est ERROR_INSTALL_USEREXIT afin que l'application bootstrap puisse s'arrêter si l'utilisateur clique sur Annuler, et pourtant tout ce que je vois pour la valeur de retour, même si je sais avait réussi à cliquer sur le bouton Annuler (je vois en fait le bouton se déprimer), est ERROR_SUCCESS.Comment savoir si l'utilisateur a cliqué sur Annuler lors de l'appel des fonctions MSI?

Est-il possible de dire, avec 100% de certitude, si l'utilisateur clique ou non sur Annuler pendant que ces appels MSI sont en cours? Si ce n'est pas le cas, y a-t-il un moyen de cacher ce bouton Annuler pendant les appels MSI afin que l'utilisateur ne soit pas trompé dans une fausse croyance qu'il peut annuler à ce moment-là? (Sur une machine rapide, ce n'est pas vraiment un problème, car le dialogue disparaît assez rapidement, mais sur une machine lente, l'utilisateur a réellement la possibilité de cliquer sur le bouton.)

Répondre

0

Si je comprends bien, il semble que vous obteniez de petites boîtes de dialogue de style «Préparation à l'installation». Si c'est le cas, ce que vous voulez faire est de préfacer vos appels avec MsiSetInternalUI pour masquer tous (ou la plupart) l'interface utilisateur. Notez que si vous appelez ensuite MsiInstallProduct ou similaire pour lancer l'installation, vous devrez peut-être restaurer un niveau d'interface utilisateur non silencieux. Si j'ai mal lu votre question, et que vous parlez d'actions personnalisées, le seul endroit où votre code peut se renseigner sur un utilisateur annulant les choses est via le code retour de MsiProcessMessage, et c'est aussi l'API que vous utiliseriez désactiver le bouton d'annulation.

+0

Merci. Bien qu'un peu extrême, il a atteint ce que je recherchais, principalement pour me débarrasser de ce bouton Annuler, car je n'arrive pas à trouver un moyen fiable de déterminer s'il a été cliqué ou non. – RobH

Questions connexes