2009-04-15 7 views
17

J'ai un programme qui nécessite à la fois x64 et x86 (dll il figure sur lesquels il a besoin au moment de l'exécution), mais en essayant de créer une configuration, il se plaint:Le programme d'installation cible-t-il x86 et x64?

Fichier AlphaVSS.WinXP.x64. dll 'ciblant' AMD64 'n'est pas compatible avec la plate-forme cible' x86 'du projet
Le fichier' AlphaVSS.Win2003.x64.dll 'ciblant' AMD64 'n'est pas compatible avec la plate-forme cible' x86 'du projet
Fichier AlphaVSS.Win2008. Le ciblage de x64.dll 'AMD64' n'est pas compatible avec la plate-forme cible 'x86' du projet

Comment puis-je configurer ma cible d'installation sur les deux plates-formes comme le fait mon programme?

Répondre

11

Le fichier MSI créé par le projet d'installation (dans Visual Studio) ne peut cibler qu'une plate-forme à la fois. Vous pouvez soit créer 2 MSI, les fusionner et créer un programme d'amorçage personnalisé qui choisira entre les deux. Il existe des produits tiers, tels que Advanced Installer par exemple, qui peuvent le faire pour vous.

+9

I Je ne voulais pas avoir à faire ça ... – Malfist

2

.Net a une option "Any CPU". Il est tentant de considérer cela comme une option «générique» qui n'utilisera que les fonctionnalités x86 moins importantes, mais qui permet au compilateur JIT de chaque machine de choisir le type de processeur approprié pour cette machine.

La seule fois que vous ne devriez pas l'utiliser est si vous savez que vous avez des dépendances ou des exigences qui ne sont pas bonnes pour une architecture ou l'autre. Par exemple: vous savez que vous avez besoin d'un lot de ram, vous avez une dépendance sur une DLL native 32 bits, ou vous voulez pré-compiler l'application.

Il y a un danger ici car vous avez une dépendance à la DLL spécifique à la plate-forme. Mais vous avez des DLL pour les deux types et il semble que vous sachiez comment choisir le bon à l'exécution. L'option 'Any CPU' fonctionnera-t-elle pour vous?

+0

Mon projet est défini sur any, toutefois, le programme d'installation n'autorise pas cette option. Un projet d'installation de la propriété TargetPlatform et j'ai l'option de x86, x64 et Itanium. Il n'y en a pas. – Malfist

+0

Hmm .... les projets d'installation incluent un fichier .exe natif pour amorcer l'installation au cas où .Net n'est pas encore présent. Cela peut être le facteur limitant. –

+0

Dans ce cas, pourriez-vous tester avec un projet d'installation 32 bits (x86) qui inclut les deux ensembles de DLL? Le projet d'installation doit toujours fonctionner sur les systèmes x64 et x86, et si les choses fonctionnent correctement, vous pouvez toujours obtenir le code x64, le cas échéant. –

5

je suis tombé sur ce trop et wrote a blog post au sujet de ma solution:

  • dégonfler le fichier en utilisant deflate.exe, en le nommant avec une extension différente (par exemple .x64)
  • ajouter à votre projet principal comme un fichier de contenu
  • ajouter un projet d'action personnalisé à votre solution
  • ajouter l'action personnalisée aux projets d'installation « Install » des actions personnalisées
  • gonfler le fichier dans les actions personnalisées me Installer ThOD utilisant
  • System.IO.Compression.DeflateStream (voir code ci-dessus)
  • faire une petite danse autour de votre bureau, dans le couloir, et passé autant de collègues que vous le souhaitez embêter :)

Le fichier deflate.exe peut être téléchargé à partir de son repository sur google code.

+1

C'est une excellente idée, et je l'ai récemment utilisée dans un projet. Une complication: si votre action personnalisée supprime le fichier compressé après l'avoir développé (ou que vous avez extrait le contenu d'un fichier zip, puis supprimé le fichier zip), votre installeur installe des raccourcis. Par défaut, les raccourcis sont annoncés, ce qui signifie que lorsque vous les lancerez, le système vérifiera que l'installation est intacte et réexécutera le programme d'installation lorsqu'il découvrira que le fichier compressé est manquant. Vous devrez modifier le fichier msi afin que les raccourcis ne soient pas annoncés. –

-2
  1. Ouvrez un projet de déploiement.
  2. Dans l'explorateur de solutions, sélectionnez le projet de déploiement.
  3. Dans la fenêtre Propriétés, sélectionnez la propriété TargetPlatform.
  4. Choisissez soit Itanium pour une plate-forme Intel Itanium 64 bits, soit x64 pour toute autre plate-forme 64 bits (tels que les jeux d'instructions AMD64 et EM64T).
  5. Lors de l'installation, une erreur sera générée et l'installation sera arrêtée si l'ordinateur cible n'est pas compatible avec la plate-forme spécifiée.
+1

Comment cela répond-il à la question? – etaiso

Questions connexes