2009-12-28 6 views
1

Nous avons notre programme setup.exe personnalisé qui lance une série de MSI individuels de manière synchrone. Schéma et l'utilisation de commande pour lancer msi est:Gestion de msi à partir d'un programme externe

msiexcehandle = CreateProcess("msiexec.exe /i product.msi /qr") 
WaitForSingleObject(msiexechandle, INFINITE) 

Maintenant, nous voulons faire ce qui suit - Lorsque l'utilisateur pressess le bouton d'arrêt dans le programme setup.exe nous voudrions arrêter complètement l'installation. Nous pouvons contrôler l'installation de tout produit msi qui doit encore être démarré, mais nous n'avons pas trouvé le moyen d'envoyer un événement à une installation déjà en cours d'exécution (qui est déjà lancée en utilisant CreateProcess). Nous souhaitons envoyer l'événement Cancel depuis le fichier setup.exe vers la boîte de dialogue de progression créée par msiexec.exe.

Veuillez suggérer une technique pour effectuer cette action. Est-il possible d'appeler une restauration sur l'exécution de l'installation à partir de la ligne de commande?

FYI, nous utilisons Wise pour créer nos MSI et VS 2008 MFC pour créer notre setup.exe.

-Kartlee

Répondre

0

Je ne pense pas que ce soit possible que vous décrivez. Les deux options que je vois sont l'automatisation de l'interface utilisateur (simuler un clic sur le bouton d'annulation) ou un gestionnaire d'interface utilisateur externe utilisé avec MsiInstallProduct() au lieu de CreateProcess().

Notez que dans les deux cas, vous ne pouvez pas toujours annuler la configuration immédiatement ou pas du tout. Bien que vos configurations ne puissent pas le faire, certaines configurations désactiveront le bouton d'annulation à certains endroits, car ils savent qu'ils ne peuvent pas revenir en arrière proprement.

Questions connexes