Je crée un programme d'installation dans VS2008 pour une application C# qui utilise SQLite, ce qui nécessite différentes versions de l'assemblage pour les environnements x86 et x64. Quel est le meilleur moyen pour que le programme d'installation installe automatiquement l'assemblage correct en fonction de l'environnement?Installation d'une version différente de l'assemblage en fonction de la plateforme?
1
A
Répondre
0
Finalement, j'ai fini par devoir bidouiller un peu. Le projet d'installation inclut désormais un fichier zip avec les versions x86 et x64 de SQLite. Mes hooks de classe de programme d'installation de projet remplacent la méthode OnBeforeInstall, puis décompresse le fichier zip dans un dossier temporaire, vérifie l'environnement et copie la version correcte dans le dossier d'installation de l'application.
Le code est quelque chose le long de ces lignes, bien que la journalisation et la gestion des erreurs aient été supprimées de cet exemple pour garder le code pertinent.
protected override void OnBeforeInstall(IDictionary savedState)
{
base.OnBeforeInstall(savedState);
UnzipSQLite();
}
private void UnzipSQLite()
{
// Installation directory
string targetDir = Context.Parameters["TargetDir"];
// SQLite.zip is saved in the temp folder by the installer
// This is setup via the GUI in Visual Studio
string zipFile = Path.Combine(TempFolder, "SQLite.zip");
// Folder where it will be unzipped to
string tempDir = Path.Combine(TempFolder, Guid.NewGuid().ToString());
// Unzip it. Requires SharpZipLib
FastZip fz = new FastZip();
fz.ExtractZip(zipFile, tempDir, FastZip.Overwrite.Always, null, string.Empty, string.Empty, true);
// Check if OS is x86 or x64
// http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/24792cdc-2d8e-454b-9c68-31a19892ca53
string subDir = (OSChecker.Is64BitOperatingSystem) ? "x64" : "x86";
// Source and destination paths
string src = Path.Combine(tempDir, subDir + "\\System.Data.SQLite.DLL");
string dest = Path.Combine(targetDir, "System.Data.SQLite.DLL");
// Move the SQLite DLL
File.Move(src, dest);
// All done. Delete our temp folder.
Directory.Delete(tempDir, true);
}
Questions connexes
- 1. Mélange d'une version différente de la même bibliothèque dans flex
- 2. C# dll liaison à la version différente
- 3. J'ai besoin d'une version indépendante de la plateforme de CharToOem. Est-ce que Boost en a?
- 4. Version de Visual Studio Setup exe différente de la version de propriétés
- 5. Activation de différentes fonctionnalités en fonction de la version iOS
- 6. Charger la classe en fonction de la version du SDK
- 7. RVM Installation (Ruby Version Manager)
- 8. Problème avec la version à installation rapide de la version à cabale
- 9. Comment implémenter le "versioning de classe" (en utilisant une version différente de la même classe)
- 10. Erreur de syntaxe avec une version différente de gcc?
- 11. MySQL retourne une valeur différente en fonction de l'emplacement GEO?
- 12. utilise une chaîne différente dans la fonction?
- 13. afficher une image différente en fonction de l'état du lien
- 14. La meilleure façon de comparer perormance de version différente de la bibliothèque
- 15. Comment rendre la sortie d'une fonction différente de l'impression?
- 16. Reliez une bibliothèque partagée à une version différente de libc
- 17. Même version dll différente sur différents ordinateurs?
- 18. Comment maintenir une version différente d'un module python?
- 19. iOS Application universelle: la version minimale du système d'exploitation est différente de la cible de déploiement
- 20. Comment obtenez-vous une version différente de GAC?
- 21. comment puis-je utiliser la construction de la bibliothèque statique par une version différente de mingw?
- 22. Génération de la version de la bibliothèque et de la version de construction
- 23. Installation du fichier sur l'emplacement en fonction de l'appel de fonction
- 24. setuptools Installation dans une version privée de python
- 25. Installation de la boussole
- 26. Charger la version différente (Java1.4 et Java1.5) de JAR dans l'heure de début du serveur
- 27. Comment résoudre "L'unité JclCompression a été compilée avec une version différente de sevenzip.IOutArchive"?
- 28. clickonce même version de publication mais version d'assemblage différente, mise à jour ne se produisant pas
- 29. Installation de cassandra dans ubuntu?
- 30. Installation de django avec python 2.5 et non avec la version par défaut de python