2010-08-07 2 views

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