В конце концов мне пришлось немного взломать это. Проект установки теперь включает zip-файл с версиями SQLite для x86 и x64. Перехватчики класса моего проекта переопределяют метод OnBeforeInstall, а затем распаковывают zip-файл во временную папку, проверяют среду и копируют правильную версию в папку установки приложения.
Код - что-то вроде этого, хотя регистрация и обработка ошибок были удалены из этого примера, чтобы сохранить код релевантным.
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);
}