2014-04-21 5 views
1

Je voudrais afficher le numéro de série dans le formulaire CustomerInfo (qui a été capturé à partir de la première installation et installé dans le registre) dans les deuxième, troisième, etc installations lorsque la mise à niveau est simplement une modification de version mineure (ou un correctif). Est-ce quelque chose qui peut être fait dans le projet de déploiement VS et/ou WIX via une action personnalisée (j'ai une méthode C++ pour extraire le SerialNumber du registre), MSI config (en éditant une ou plusieurs tables via say Orca), ou sinon
Cordialement
TravisVS ou WIX MSI installer - afficher le numéro de série de la première installation

Répondre

3

Personnellement je fais toujours PerMachine installe et ne prennent pas la peine de montrer la boîte de dialogue d'information des clients. Si une application veut avoir une licence, il est préférable de le faire dans l'application lors de la première exécution.

Si vous voulez vraiment le faire dans le MSI, vous avez beaucoup de travail devant vous. MSI ne conserve pas les propriétés d'une transaction à l'autre, vous devrez donc le faire vous-même. Voir:

The WiX toolset's "Remember Property" pattern

J'ai un projet open source appelé IsWiX. Il inclut un modèle de projet Visual Studio qui crée un cadre de projet d'installation. Une partie de cette structure montre comment insérer une boîte de dialogue personnalisée, puis crée un composant pour gérer la propriété remember pour le contrôle de cette boîte de dialogue. Vous pouvez trouver la source here.

+0

Merci beaucoup pour la réponse rapide Chris - le motif décrit dans l'article semble bon - je vais essayer –

+0

Salut Chris - J'ai implémenté le motif dans l'article et ça marche bien - la seule question que j'ai est parle d'un niveau de machine Vs installant le niveau d'utilisateur - c.-à-d. persistant le numéro de série à HKCU Vs HKLM. Le problème est que je ne le saurai pas à l'avance car c'est une option dans le processus d'installation - ai-je besoin de deux sections différentes dans mon fichier WIX pour accommoder: "Package InstallScope = 'perUser'" et "Package InstallScope = 'perMachine '' avec les emplacements de registre correspondants (HKCU et HKLM resp.) –

+1

Avez-vous vraiment, vraiment besoin de supporter une installation par utilisateur? Ce modèle est très difficile à utiliser dans un environnement d'entreprise et convient mieux lorsque vous avez des applications «virales» qui diffusent le bouche à oreille et sont installées par des utilisateurs sans droits d'administrateur. Dans cette situation toutes les ressources doivent aller des endroits où ils ont la permission.Typiquement, cela signifie HKCU au lieu de HKLM. Dans toutes mes années et centaines d'installateurs écrits, je n'ai jamais eu une analyse de rentabilité valable pour un. Je supprime simplement l'option et construit le MSI pour être perMachine. –

2

Je vais passer la partie WiX couverte par Chris. Pour ce faire, dans un projet VS, vous devez utiliser la boîte de dialogue Informations client, ajoutée à partir de la liste des boîtes de dialogue prédéfinies supplémentaires, et utiliser le composant SerialNumberTemplate. Cela définit la propriété ProductID qui est la façon dont vous êtes censé faire des numéros de série. Ainsi, vous pouvez créer un élément de registre dans l'IDE de Visual Studio qui a la valeur [ProductID] pour l'enregistrer quelque part personnel. Le « officiel » façon de saisir pour un produit installé est MsiGetProductInfo() ou équivalent passer le ProductCode et en demandant « ProductID » comme l'indique ici:

http://msdn.microsoft.com/en-us/library/aa370130(v=vs.85).aspx

Pour résumer, si le paquet utilise le mécanisme officiel PIDKEY/ProductID (comme VS et peut-être WiX) vous n'avez pas besoin de le sauvegarder vous-même et vous pouvez l'obtenir via MsiGetProductInfo() ou un équivalent de code scipt/managé.

Si vous souhaitez afficher ce SerialNumber précédent dans une configuration VS dans le formulaire d'informations client standard lors d'une mise à niveau, je ne pense pas que vous puissiez le faire. Il n'y a pas de mécanisme pour entrer dans ces formulaires. Si vous enregistrez le SerialNumber en mode privé, vous pouvez essayer une recherche de registre pour votre numéro de série enregistré et le stocker dans la propriété PIDKEY pour voir si elle s'affiche, cela peut fonctionner car la propriété PIDKEY est la source de cette valeur.

Questions connexes