Installations simultanées

Les installations simultanées, également appelées installations imbriquées, sont une fonctionnalité déconseillée de Windows Installer. Les applications installées avec des installations simultanées peuvent éventuellement échouer, car les clients peuvent avoir des difficultés à les entretenir. N’utilisez pas d’installations simultanées pour installer des produits destinés à être mis à la disposition du public. Les installations simultanées peuvent avoir une applicabilité limitée dans des environnements d’entreprise contrôlés lorsqu’elles sont utilisées pour installer des applications qui ne sont pas destinées à être mis à la disposition du public. La documentation sur les installations simultanées est fournie aux auteurs de packages qui souhaitent utiliser des installations simultanées avec des applications qui ne sont pas destinées à une distribution publique.

Une action d’installation simultanée installe un autre package Windows Installer pendant l’exécution d’une installation en cours. Une installation simultanée est ajoutée à un package en créant une action d’installation simultanée dans la table CustomAction et en planifiant cette action personnalisée dans les tables de séquences. Le champ Cible de la table CustomAction contient une chaîne des paramètres de propriété publique utilisés par l’installation simultanée. Le champ Source de la table CustomAction identifie le package simultané. Une action d’installation simultanée peut réinstaller ou supprimer uniquement une application qui a été installée par le package d’installation de l’application actuelle.

Le type de l’action d’installation simultanée est spécifié dans le champ Type de la table CustomAction. Selon le type d’action personnalisé, le package de l’application simultanée peut résider dans un sous-stockage du package principal, en tant que fichier à un emplacement spécifié par une propriété ou en tant qu’application publiée sur l’ordinateur de l’utilisateur. Les types suivants d’actions personnalisées effectuent une installation simultanée.

Type d’action personnalisée Description
Type d’action personnalisée 7 Installation simultanée d’un produit résidant dans le package d’installation.
Type d’action personnalisée 23 Installation simultanée d’un package d’installation dans l’arborescence source actuelle.
Type d’action personnalisée 39 Installation simultanée d’un package d’installation publié.

 

Une installation simultanée partage les mêmes paramètres d’interface utilisateur et de journalisation que l’installation principale.

Les actions d’installation simultanée doivent être placées entre l’action InstallInitialize et l’action InstallFinalize de la séquence d’actions de l’installation principale. Lors de la restauration de l’installation principale, le programme d’installation restaure également l’installation simultanée. L’utilisation d’une exécution différée avec des actions d’installation simultanée n’est pas nécessaire, car le programme d’installation combine les informations de restauration de l’installation simultanée et de l’installation principale. Toutes les modifications sont annulées lors d’une installation de restauration.

Les valeurs de retour pour les actions d’installation simultanée sont les mêmes que pour les autres actions personnalisées. Consultez Valeurs de retour des actions personnalisées.

Les actions standard ou personnalisées qui spécifient un redémarrage automatique du système, ou demandent à l’utilisateur de redémarrer, peuvent également effectuer un redémarrage ou une demande à partir d’une installation simultanée.

Quand le programme d’installation commence une installation simultanée, il verrouille toutes les autres installations jusqu’à ce que l’installation simultanée soit terminée, avant de poursuivre l’installation principale. Le programme d’installation peut uniquement exécuter des installations simultanées en tant qu’actions personnalisées synchrones. Consultez Actions personnalisées synchrones et asynchrones. Les indicateurs d’option décrits dans Options de traitement du retour de l’action personnalisée doivent être définis sur aucun (+0) ou sur msidbCustomActionTypeContinue (+64).

Une action d’installation simultanée peut installer une application à exécuter localement, à exécuter à partir de la source, à réinstaller ou à supprimer de la même manière que lors de l’utilisation de MsiInstallProduct pour une installation normale. Pour spécifier le type d’installation, transmettez la propriété ADDLOCAL, ADDSOURCE, REINSTALL ou REMOVE à l’action d’installation simultanée.

Les actions d’installation simultanée peuvent être créées par paires, une action utilisée pour l’installation et l’autre pour supprimer l’installation simultanée. Un type d’action personnalisée 7 ou un type d’action personnalisée 23 est généralement utilisé pour l’installation. Un type d’action personnalisée 39 est généralement utilisé pour supprimer l’installation simultanée lorsque le produit parent est désinstallé. L’enregistrement de l’action personnalisée de suppression dans la table CustomAction peut avoir le GUID de code de produit dans le champ Source et « REMOVE=ALL » dans le champ Cible. Les deux actions personnalisées doivent être créées dans la table de séquences d’actions avec des conditions s’excluant mutuellement. Par exemple, l’action personnalisée qui installe le produit peut avoir « PAS installé » dans son champ Condition et l’action personnalisée qui supprime l’installation simultanée peut avoir « REMOVE=ALL » dans son champ Condition.

Il n’existe aucune méthode permettant d’interroger un package pour connaître son coût. Cela rend difficile la détermination du coût d’une installation simultanée. Des lignes doivent être ajoutées à la table ReserveCost pour indiquer les dossiers et les coûts les plus défavorables du composant associé à l’installation simultanée.

Les seules options de traitement de retour d’action personnalisée disponibles avec les actions d’installation simultanée sont aucun (+0) et msidbCustomActionTypeContinue (+64).

Notez qu’une installation parente ne peut pas appeler son propre package en tant qu’action d’installation simultanée.

Notez que si une installation par ordinateur tente d’exécuter une installation simultanée par utilisateur, par défaut le programme d’installation inscrit l’installation parente par utilisateur. Cela peut entraîner la suppression incorrecte de l’application par le programme d’installation, car le programme d’installation tente de désinstaller l’application par ordinateur alors qu’elle est inscrite en fait par utilisateur. Pour forcer l’état d’une installation simultanée à suivre l’état de son installation parente, entrez ALLUSERS="[ALLUSERS]" dans la colonne Cible de la table CustomAction. Dans ce cas, l’installation simultanée s’effectue par ordinateur si le parent est par ordinateur, et l’installation simultanée s’effectue par utilisateur si le parent est par utilisateur.

Les développeurs doivent noter les avertissements suivants lors de la création d’installations simultanées.

  • Les installations simultanées ne doivent pas partager de composants.
  • Une installation administrative ne doit pas contenir également une installation simultanée.
  • La mise à jour corrective et la mise à niveau peuvent ne pas fonctionner avec les installations simultanées.
  • Le programme d’installation peut ne pas déterminer correctement le coût d’une installation simultanée.
  • Les contrôles ProgressBars intégrés ne doivent pas être utilisés avec des installations simultanées.
  • Les ressources qui doivent être publiées ne doivent pas être installées par l’installation simultanée.
  • Un package qui effectue une installation simultanée d’une application doit également désinstaller l’application simultanée quand le produit parent est désinstallé.

Pour empêcher l’installation simultanée d’un package, ajoutez l’une des instructions conditionnelles suivantes dans la table LaunchCondition. Cela empêche l’installation du package par une action d’installation simultanée exécutée par une autre installation. Cela n’empêche pas la suppression du package par l’action RemoveExistingProducts. Consultez également la propriété ParentOriginalDatabase et la propriété ParentProductCode.

"Not ParentProductCode"
"Not ParentOriginalDatabase"