Vous pouvez contrôler manuellement l'état de la barre de progression en envoyant des messages INSTALLMESSAGE_PROGRESS
au programme d'installation. Les détails peuvent être trouvés ici:
http://msdn.microsoft.com/en-us/library/aa370354.aspx
En particulier, vous aurez besoin d'une action personnalisée pour gérer la barre d'état (il est ce qui sera responsable de faire les appels appropriés à MsiProcessMessage
je vous recommande également. l'utiliser pour reproduire les sous-programmes d'installation Voici quelques pseudocode pour illustrer ce que je pense.
LONG LaunchSubinstallersCA(MSIHANDLE current_installer)
{
// Initialize the progress bar range and position
MsiProcessMessage(current_installer, reset_message); // see MSDN for details
for each (subinstaller in list_of_installers)
{
launch subinstaller; // see MSDN for details
// Update the progress bar to reflect most recent changes
MsiProcessMessage(current_installer, increment_message); // see MSDN for details
}
return (result);
}
la principale vers le bas-côté est que la barre de progression progressera de manière un peu saccadée Si tu voulais vraiment. pour obtenir plus de fantaisie et le rendre plus lisse, vous pouvez lancer un thread "écouteur" séparé qui attendrait pour les mises à jour du sous-programme d'installation afin d'effectuer des incréments plus précis dans la barre de progression. Quelque chose comme:
LONG LaunchSubinstallersCA(MSIHANDLE current_installer)
{
// Initialize the progress bar range and position
MsiProcessMessage(current_installer, reset_message); // see MSDN for details
launch_listener_thread(); // launches listener_thread_proc (see below)
for each (subinstaller in list_of_installers)
{
launch subinstaller; // see MSDN for details
}
tell_listener_thread_to_stop();
optionally_wait_for_listener_thread_to_die();
return (result);
}
void listener_thread_proc()
{
// Loop until told to stop
while (!time_for_me_to_stop)
{
// Listen for update from sub-installer
timed_wait_for_update(); // probably required IPC, perhaps a named event?
// Only update the progress bar if an update message was actually received
if (!timeout)
{
// Update the progress bar to reflect most recent changes
MsiProcessMessage(current_installer, increment_message); // see MSDN for details
}
}
}
Il est évident que chaque sous-programme d'installation devrait être en mesure de signaler l'installateur principal que des progrès ont été réalisés, donc cela nécessitera potentiellement des modifications plus importantes au sein de votre produit. Que cela vaille ou non l'effort vous appartient.
Avez-vous des informations sur l'utilisation de l'interface utilisateur WPF avec WIX? Été à la recherche de comment utiliser l'option Embedded UI et n'a pas trouvé d'exemples. –