Открытие файла Firefox «place.sqlite» с помощью PowerShell и System.Data.SQLite - PullRequest
2 голосов
/ 22 апреля 2011

Я хочу запустить следующий код:

$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 что-то не так.

Это не проблема с паролем, а проблема с версией.Благодаря этой записи о переполнении стека я обнаружил, что мне нужен SQLite 3.7.

Надеюсь, я найду какого-нибудь текущего поставщика ADO.

sqlite-dotnet-x86-1006900.exe из здесь не работает

Исключение вызывает "Открыть" с аргументом (ами) "0": "Невозможно загрузить DLL" SQLite.Inte rop.DLL ': указанный модульне удалось найти. (Исключение из HRESULT: 0x8 007007E) "

Возможно, это отладочная сборка.Есть ли какая-либо предварительно собранная версия без SQLite.Interop.DLL?

1 Ответ

1 голос
/ 22 апреля 2011

Окончательно решено (путем обхода без установки в 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 ошибка. Для этой ошибки есть закрытый тикет , но я думаю, что он не исправлен. Билет вновь открыт. проверьте там новые способы обхода или решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...