2010-04-30 6 views
5

J'ai une solution .NET avec un projet d'installation qui génère un MSI. L'un des projets installés par MSI contient un fichier App.Config. Il semble que les valeurs de ce fichier de configuration sont incorporées dans le fichier MSI au moment de la compilation. Y at-il un moyen de les remplacer à l'exécution? Par exemple, le fichier App.Config avec lequel je travaille définit l'URL d'un service Web auquel le programme d'installation s'adresse. Est-il possible de remplacer cette URL lors de l'exécution, de sorte que je n'ai pas besoin de recompiler le fichier MSI si l'URL change?Remplacer les paramètres app.config intégrés dans un MSI?

Mise à jour: je suppose que ce que je demande est, puis-je copier un fichier app.config, avec un certain nom, dans mon répertoire d'installation tel qu'il remplacera, à l'exécution, les paramètres intégrés dans le MSI ? Je sais que je peux redessiner le code pour vérifier les remplacements dans d'autres endroits, comme le registre ou un emplacement de fichier texte bien connu, mais mon besoin immédiat est de résoudre ce problème sans recompiler. (Il y a beaucoup de disques d'installation entre les mains des utilisateurs)

Répondre

1

Nous avons eu un défi similaire lors du développement de l'application sur laquelle je travaille actuellement. Nous voulions être en mesure d'avoir une nouvelle installation démarrée la première fois préconfigurée avec des paramètres transférés depuis une autre machine, ou un utilitaire de configuration. Honnêtement, je ne sais pas à quel point notre solution est bonne, mais je peux vous dire ce que nous avons fait, ce qui fonctionne pour nous, pour le moment.

Dans notre cas, la plupart de ces paramètres se retrouvent dans le fichier app.config, qu'il n'est pas recommandé d'essayer de manipuler depuis l'extérieur de l'application elle-même. Cela peut être fait, mais c'est dangereux de plusieurs façons subtiles. Si ce n'était pas le cas, la meilleure option serait probablement d'ajouter une "action personnalisée" pour le projet d'installation qui injecterait les données dans le fichier, la base de données, ou tout ce que nous utilisions pour stocker nos paramètres. Un point de départ pour ce faire peut être trouvé in MSDN. Mais comme ce n'était pas une option, nous avons décidé que le moyen le plus simple d'obtenir des données via l'installation sans l'intégrer dans le package d'installation serait d'utiliser un fichier "ride-along". C'est un fichier que votre installation connaît, mais qui n'est pas construit dans le fichier .MSI. Il doit simplement être dans un emplacement connu par rapport au .MSI lors de l'installation. Vous dites au projet d'installation ce que ce fichier est, où il devrait être, et où le mettre. Ensuite, votre application peut vérifier son existence au démarrage et traiter tout ce qu'elle trouve. Dans votre cas, il s'agit d'un paramètre de remplacement d'URL. Ensuite, l'application peut supprimer le fichier, de sorte qu'il ne soit pas chargé chaque fois qu'il démarre.

Dans le projet d'installation, certaines propriétés doivent être définies pour que le fichier fonctionne correctement avec le style de package généré par un projet VS Setup.Assurez-vous de les définir, sinon vous risquez d'obtenir des erreurs ou d'autres comportements bizarres lorsque le fichier «ride-along» est exclu car il n'est pas nécessaire.

  • Etat: ne réinstallera
  • PacakgeAs: vsdpaLoose
  • Vital: Faux

Nous appelons notre AutoImport.Settings.xml fichier. Ceci est un fichier XML personnalisé qui stocke toutes les données que nous voulons être en mesure d'initialiser notre application avec quand il est installé. Il suit le même format que nous utilisons lorsque nous exportons/importons manuellement des configurations de l'application à l'exécution, et utilise le même mécanisme. Il le fait automatiquement au démarrage, s'il trouve le fichier là-bas. Cela nous permet de configurer une machine «prototype» avec tous les paramètres spécifiques au réseau que nous souhaitons avoir, d'exporter ces paramètres, puis d'envoyer ce fichier d'importation pour le chargement automatique avec toutes les autres installations que nous effectuons dans cet environnement réseau.

Comme je l'ai dit, il semble qu'il devrait y avoir un «meilleur» moyen. Les seuls que nous ayons pu trouver signifient partir des mécanismes app.config et user.config, qui ont leurs avantages. Donc, à la fin, nous avons décidé que c'était l'alternative la moins disante qui répondait pleinement à nos besoins.

+0

Merci pour les suggestions. Cette application est installée sur CD, donc l'ajout ou la modification du fichier ride-along pourrait être difficile, donc je pense qu'un meilleur ajustement pour mes besoins serait de modifier le code d'installation pour vérifier une clé de registre bien connue pour un défaut. Mon objectif principal était de savoir si le MSI chercherait automatiquement un fichier d'accompagnement d'un certain nom de fichier et on dirait que vous dites "non, vous devez le faire vous-même". Pas la réponse que je voulais, mais une réponse néanmoins :) –

0

Si vous avez besoin du programme d'installation pour parler à un service Web, où allez-vous stocker l'URL, sinon dans l'installateur lui-même?

Si vous avez un endroit bien connu où rechercher l'URL (URL "constante", base de données, partage de fichiers, etc.), vous pouvez inclure son adresse dans le programme d'installation. Sinon, il n'y a pas de place pour obtenir l'URL de ...

0

Si vous exposez l'URL en tant que propriété publique (ie toute propriété de la table Proeprties qui est en majuscules est considérée publique - je ne sais pas si vous avez ce niveau de contrôle dans un projet d'installation dans VS), alors vous pouvez le définir à partir de la ligne de commande lorsque vous exécutez le MSI. Cependant, ce n'est pas une bonne solution à long terme pour votre problème particulier - peut-être une meilleure idée est de faire une connexion initiale à une adresse connue qui ne va pas changer, et il peut retourner l'adresse actuelle du vrai service web que vous voulez parler à.

+0

L'URL en question _est_ "l'adresse connue qui ne va pas être modifiée", c'est de là que le programme d'installation télécharge d'autres données de configuration. Le problème est que cette URL a changé après tout :) –

+0

Ensuite, vous pourriez être au point où vous devez mordre la balle, et reconstruire le MSI (en supposant qu'il est impossible de faire une sorte de redirection automatique sur le serveur d'hébergement de le service Web d'origine). – slugster

Questions connexes