2009-03-25 4 views
1

Je travaille sur un projet d'installation qui consiste en un fichier MSI et une application bootstrap qui gère les prérequis; et puisque le besoin de certaines conditions préalables dépend des fonctionnalités que l'utilisateur choisit d'installer, l'application bootstrap fournit également l'interface utilisateur. Je veux pouvoir forcer le panneau de configuration Ajout/Suppression de programmes (ou Programmes et fonctionnalités) à exécuter l'application d'amorçage au lieu de l'interface MSI lorsque l'utilisateur souhaite exécuter une installation de modification. J'ai essayé de modifier la valeur ModifyPath sous la clé de Registre de désinstallation du programme d'installation sur le chemin de l'application d'amorçage, mais en vain. En cliquant sur le bouton Modifier dans l'ARP, je reçois toujours le MSI.Comment obtenir l'ARP pour exécuter l'application d'amorçage de mon programme d'installation pour une installation de modification?

est-il un moyen facile de faire ce que je veux? A défaut, est-il possible pour le MSI de détecter qu'il a été exécuté à partir de l'ARP à l'aide du bouton Modifier afin de pouvoir afficher un message d'erreur indiquant à l'utilisateur d'exécuter l'application d'amorçage à la place? (Par exemple, ne l'ARP utilise les mêmes arguments de ligne de commande qu'un utilisateur utilisera pour exécuter le MSI et spécifiez une modification installer sans avoir à voir la page de maintenance de l'interface utilisateur? Sinon, que dois-je chercher?)

Modifier Mon installateur installe pas seulement une application, mais une suite d'applications, dont chacun l'utilisateur est autorisé à choisir de ne pas installer. (Nous installons ces applications en tant que suite, car la plupart d'entre elles dépendent de l'installation de l'une d'entre elles.) Ainsi, il sera plus facile pour l'utilisateur de faire appel à un seul installateur, plutôt qu'aux installateurs distincts. ce nouveau programme d'installation va être remplacé.)

Les applications de la suite ne requièrent pas toutes le même ensemble de conditions préalables. Par conséquent, il n'est pas facile pour le MSI de vérifier les conditions préalables avant de savoir quelles applications dans la suite. suite que l'utilisateur veut installer. En outre, nous souhaitons faciliter la tâche de l'utilisateur en installant automatiquement les programmes d'installation pour tous les prérequis pour les applications que l'utilisateur souhaite installer. (Ceci est la principale raison pour laquelle a été mis en œuvre l'interface utilisateur de l'installateur dans l'application bootstrap.)

Est-il possible pour le MSI pour lancer l'application d'amorçage puis quittez silencieusement immédiatement, tandis que l'application d'amorçage se poursuit, relançant finalement le MSI? (Lorsque l'application bootstrap lance le MSI, l'un des arguments de la ligne de commande qu'il transmet dans le MSI est une propriété qui lui indique que l'application bootstrap l'a lancée, ce qui est actuellement utilisé, entre autres, pour permettre au MSI de montrer une erreur. message indiquant à l'utilisateur d'exécuter l'application bootstrap sauf si une installation de désinstallation ou de réparation a été spécifiée sur la ligne de commande.)

Répondre

0

j'ai pu résoudre mon dilemme en obtenant le MSI pour lancer l'application d'amorçage pour moi. J'ai simplement écrit une action personnalisée qui lance l'application bootstrap et n'attend pas qu'elle se termine. Initialement, j'ai essayé de mettre l'action personnalisée dans la séquence de l'interface utilisateur, mais je ne pouvais pas terminer l'installation sans générer des erreurs de cette façon. Puisque mon but était d'exécuter le bootstrap uniquement pour les installations de modification, j'ai placé quelques nouveaux événements de contrôle sur le bouton Suivant de la boîte de dialogue Maintenance (où l'utilisateur choisit entre Modifier, Réparer et Supprimer).Si l'utilisateur a choisi Maintenance (MaintenanceMode ~ = "Modifier"), l'action personnalisée est lancée et la boîte de dialogue est ignorée à l'aide de l'action EndDialog avec Exit comme argument. (J'ai modifié la condition sur l'événement de contrôle existant qui va au dialogue suivant pour être le négatif de celui qui provoque le lancement du bootstrap, c'est-à-dire PAS (MaintenanceMode ~ = "Modifier").) L'application bootstrap est programmée pour passez la boîte de dialogue Maintenance dans son interface graphique et démarrez au prochain dialogue de la séquence, bien que l'utilisateur soit autorisé à revenir au dialogue de maintenance s'il le souhaite. (S'il le fait, l'application bootstrap revient simplement à sa version du dialogue de maintenance, qui ressemble beaucoup à celle du MSI.)

Je sais, c'est un peu un kludge, mais il fait ce que je besoin de le faire. :-)

1

Ajout/Suppression de programmes exécute uniquement votre MSI, il n'existe aucun support pour trouver ou exécuter des applications d'amorçage.

Qu'est-ce que vous pouvez (et devrait) faire est d'ajouter à votre condition de vérifier MSI quelle que soit la façon dont il est géré. De cette façon, vous pouvez avertir l'utilisateur qu'il demande quelque chose qui ne peut actuellement pas être accompli (en ajoutant une fonctionnalité qui n'a pas encore ses prérequis).

Vous pouvez ajouter un message sur l'exécution du programme d'amorçage au lieu si un prereq manque.

Questions connexes