Открытие файла Firefox 'place.sqlite' с помощью PowerShell и System.Data.SQLite
Я хочу запустить следующий код:
$dll = [System.Reflection.Assembly]::LoadWithPartialName("System.Data.SQLite")
# [System.Reflection.Assembly]::LoadFrom("C:\Program Files\System.Data.SQLite\bin\System.Data.SQLite.dll")
$ConnectionString = "Data Source=C:\Var\sqlite_ff4\places.sqlite"
$conn = New-Object System.Data.SQLite.SQLiteConnection
$conn.ConnectionString = $ConnectionString
$conn.Open()
$sql = "SELECT * from moz_bookmarks"
$cmd = New-Object System.Data.SQLite.SQLiteCommand($sql, $conn)
# $cmd.CommandTimeout = $timeout
$ds = New-Object system.Data.DataSet
$da = New-Object System.Data.SQLite.SQLiteDataAdapter($cmd)
$da.fill($ds)
$conn.close()
$ds.tables[0]
На линии
$conn.Open()
Я получаю ошибку
Exception calling "Open" with "0" argument(s): "File opened that is not a database file
file is encrypted or is not a database"
At line:5 char:11
+ $conn.Open <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Файл places.sqlite
это от Firefox 4.0. Я использую http://sourceforge.net/projects/sqlite-dotnet2/files/.
РЕДАКТИРОВАТЬ:
Вышесказанное работает для файла Firefox 3.0 places.sqlite
, Что-то, кажется, отличается от Firefox 4.0.
Кажется, это не проблема с паролем, а проблема с версией. Благодаря этому сообщению Stack Overflow я обнаружил, что мне нужен SQLite 3.7.
Я надеюсь, что найду какого-нибудь текущего поставщика ADO.
sqlite-dotnet-x86-1006900.exe отсюда не работает
Исключение, вызывающее "Open" с аргументом (ами) "0": "Невозможно загрузить DLL" SQLite.Inte rop.DLL ": указанный модуль не найден. (Исключение из HRESULT: 0x8 007007E)"
Это возможно отладочная сборка. Есть ли какая-либо предварительно собранная версия без SQLite.Interop.DLL?
1 ответ
Окончательно решено (путем обхода не установки в GAC):
Чтобы открыть Firefox 4.0 place.sqlite, вы должны использовать версию 3.7 или выше от sqlite.
Я установил sqlite-dotnet-x86-1007000.exe отсюда, но не установил флажок установки в GAC. Установка в GAC все еще неисправна.
Теперь следующий код PowerShell отлично работает с копией place.sqlite (помните, что вы не можете открыть ее, пока она заблокирована Firefox):
# adapt these two lines to your loacal system
[System.Reflection.Assembly]::LoadFrom("C:\Program Files\System.Data.SQLite\bin\System.Data.SQLite.dll")
$ConnectionString = "Data Source=C:\Var\sqlite_ff4\places.sqlite"
$conn=new-object System.Data.SQLite.SQLiteConnection
$conn.ConnectionString=$ConnectionString
$conn.Open()
$sql = "SELECT * from moz_bookmarks"
$cmd=new-object System.Data.SQLite.SQLiteCommand($sql,$conn)
$ds=New-Object system.Data.DataSet
$da=New-Object System.Data.SQLite.SQLiteDataAdapter($cmd)
$da.fill($ds)
$conn.close()
$ds.tables[0]
Начиная с sqlite-dotnet-x86-1006900.exe они выплевывали SQLite.Interop.dll из System.Data.SQLite.dll, но у них были проблемы с установкой в GAC. Если вы установите флажок "Установить в GAC", вы получите ошибку "Невозможно загрузить DLL" SQLite.Interop.DLL. Есть закрытый тикет на эту ошибку, но я думаю, что она не исправлена. Билет вновь открыт. проверьте там для новых решений или решений.