打开Firefox文件';places.sqlite';使用PowerShell和System.Data.SQLite

打开Firefox文件';places.sqlite';使用PowerShell和System.Data.SQLite,sqlite,powershell,ado.net,Sqlite,Powershell,Ado.net,我想运行以下代码: $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\pl

我想运行以下代码:

$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
使用“0”参数调用“Open”时出现异常:“打开的文件不是数据库文件。”
文件已加密或不是数据库“
第5行字符:11
+$conn.Open最终解决(通过解决不在GAC中安装的问题):

要打开Firefox 4.0 places.sqlite,必须使用sqlite的3.7或更高版本

我从安装了sqlite-dotnet-x86-1007000.exe,但没有选中“在GAC中安装”复选框。GAC中的安装仍然存在故障

现在,以下PowerShell代码可以在places.sqlite的副本上正常工作(请记住,被Firefox锁定时无法打开它):

由于sqlite-dotnet-x86-1006900.exe,他们从System.Data.sqlite.dll中吐出sqlite.Interop.dll,但在GAC中安装时遇到问题。如果选中“在GAC中安装”复选框,则会得到一个 无法加载DLL“SQLite.Interop.DLL”
错误。这个错误有一个关闭的错误,但我认为它不是固定的。票又重新打开了。检查那里是否有新的解决方法或解决方案。

您是否可以通过任何其他SQLite工具打开此数据库,例如sqlite3.exe命令行实用程序(请参阅官方网站下载)?我可以使用SQLite Manager Firefox插件和sqlite3.exe places.SQLite打开它。我得到:错误:文件已加密或不是数据库只是猜测:它可能受密码保护。如果是这种情况,您需要获取它并在连接字符串
datasource=。。。;密码=…
。安装时是否选中“GAC”选项?尝试这样做,然后使用变通方法(顺便说一句,是我发布的,所以我尝试了这个,它对我有效)。是的,我尝试了。其他dll转到C:\Windows\assembly,但缺少SQLite.Interop.dll。返回到旧版本开发脚本,直到有一个固定的预编译版本。我不想自己花时间编译它。
# 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]