C# buf[0]=1; buf[1]=1; wsize=写入(fd,buf,2); 关闭(fd); 出口(0); }
我也有同样的问题。之前,我使用Python脚本(与sqlite集成)从cookies.sqlite和perms.sqlite文件获取数据。后者仍然可以正常工作。实际上,所有其他.sqlite文件都是可读的。。。除了cookies.sqlite和places.sqlite。这两个错误都会产生“加密或不是数据库”错误 我没有寻找Python(或sqlite3)的升级,而是为.sqlite文件创建了一个补丁。此C代码将偏移量18和19处的字节从2更改为1。我在Cygwin下的Windows上运行这个,但是它应该在Unix/Linux上编译和运行 警告:不要对原始Firefox cookies.sqlite文件执行此操作。 相反,将其复制到临时文件,然后在副本上运行修补程序C# buf[0]=1; buf[1]=1; wsize=写入(fd,buf,2); 关闭(fd); 出口(0); },c#,.net,firefox,system.data.sqlite,C#,.net,Firefox,System.data.sqlite,我也有同样的问题。之前,我使用Python脚本(与sqlite集成)从cookies.sqlite和perms.sqlite文件获取数据。后者仍然可以正常工作。实际上,所有其他.sqlite文件都是可读的。。。除了cookies.sqlite和places.sqlite。这两个错误都会产生“加密或不是数据库”错误 我没有寻找Python(或sqlite3)的升级,而是为.sqlite文件创建了一个补丁。此C代码将偏移量18和19处的字节从2更改为1。我在Cygwin下的Windows上运行这个,
// ffpatch.c
// Edits the specified Firefox .sqlite file.
// Changes 0x0202 to 0x0101 at offset 18/19.
// BEFORE
// 0000000 S Q L i t e f o r m a t 3 \0
// 0000020 004 \0 002 002 \0 @ \0 \0 005 034 \0 \0 \0 N
// AFTER
// 0000000 S Q L i t e f o r m a t 3 \0
// 0000020 004 \0 001 001 \0 @ \0 \0 005 034 \0 \0 \0 N
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#define PROGNAME "ffpatch"
#define MY_OFFSET 18
int main (int argc, char *argv[])
{
int fd;
char buf[2];
off_t offset;
ssize_t wsize;
if (argc != 2)
{
fprintf(stderr, "usage: %s sqlite-file\n", PROGNAME);
exit(1);
}
if ((fd = open(argv[1], O_RDWR)) == -1)
{
fprintf(stderr, "cannot open %s\n", argv[1]);
exit(1);
}
if ((offset = lseek(fd, MY_OFFSET, SEEK_SET)) != MY_OFFSET)
{
fprintf(stderr, "lseek() failed\n");
exit(1);
}
buf[0] = 1;
buf[1] = 1;
wsize = write(fd, buf, 2);
close(fd);
exit(0);
}
//ffpatch.c
//编辑指定的Firefox.sqlite文件。
//将偏移量18/19处的0x0202更改为0x0101。
//以前
//0000000 S Q L i t f或m a t 3\0
//0000020 004\0 002 002\0@\0\0 005 034\0\0\0\0 N
//之后
//0000000 S Q L i t f或m a t 3\0
//0000020 004\0 001\0@\0\0 005 034\0\0\0\0 N
#包括
#包括
#包括
#包括
#定义PROGNAME“ffpatch”
#定义我的_偏移量18
int main(int argc,char*argv[])
{
int-fd;
char-buf[2];
偏移量;
ssize_t wsize;
如果(argc!=2)
{
fprintf(stderr,“用法:%s sqlite文件\n”,PROGNAME);
出口(1);
}
如果((fd=open(argv[1],O_RDWR))=-1)
{
fprintf(stderr,“无法打开%s\n”,argv[1]);
出口(1);
}
如果((偏移量=lseek(fd,我的偏移量,搜索集))!=我的偏移量)
{
fprintf(stderr,“lseek()失败\n”);
出口(1);
}
buf[0]=1;
buf[1]=1;
wsize=写入(fd,buf,2);
关闭(fd);
出口(0);
}
您好,非常感谢您的回答
我是这样申请的:
一,。
我在这里下载了.NET 4.0当前ADO.NET连接器的源代码:
也许你必须先用匿名用户名和密码登录网站
二,。
我通过下载安装此ADO.NET连接器获得了sqlite3.dll v.3.7.4的预编译版本:
(您也可以使用ADO.NET连接器库替换system.data.sqlite.org中的连接器。
我自己只对sqlite3.dll感兴趣。)
三,。
从system.data.sqlite.org编译源代码后,我将生成的system.data.sqlite.dll和sqlite3.dll复制到我的应用程序输出目录。请注意,这两个DLL都是为x86或x64机器编译的
您好,非常感谢您的回答 我是这样申请的: 一,。 我在这里下载了.NET 4.0当前ADO.NET连接器的源代码: 也许你必须先用匿名用户名和密码登录网站 二,。 我通过下载安装此ADO.NET连接器获得了sqlite3.dll v.3.7.4的预编译版本: (您也可以使用ADO.NET连接器库替换system.data.sqlite.org中的连接器。 我自己只对sqlite3.dll感兴趣。) 三,。 从system.data.sqlite.org编译源代码后,我将生成的system.data.sqlite.dll和sqlite3.dll复制到我的应用程序输出目录。请注意,这两个DLL都是为x86或x64机器编译的
问候我想我明白你的问题了。您的数据库连接正常。首先,您使用的是哪个版本的
dotnetFramework
?因此,您可以下载并使用System.Data.SQLite.dll
文件进行引用,然后您的问题可能会得到解决。我想您使用的是较旧的System.Data.SQLite.dll文件(与您的dot net版本不匹配)。我想我解决了您的问题。您的数据库连接正常。首先,您使用的是哪个版本的dotnetFramework
?因此,您可以下载并使用System.Data.SQLite.dll
文件进行引用,然后您的问题可能会得到解决。我认为您使用的是较旧的System.Data.SQLite.dll文件(与您的dot net版本不匹配)。这是正确的。Firefox 4.0使用的WAL日志模式与较旧版本的SQLite不兼容。我在工作中也广泛使用该模式,并在此处拥有自己的最新副本:。我不得不继续我自己的版本,因为我不能等待官方版本-没有ETA。这是正确的。Firefox 4.0使用的WAL日志模式与较旧版本的SQLite不兼容。我在工作中也广泛使用该模式,并在此处拥有自己的最新副本:。我不得不继续我自己的版本,因为我迫不及待地等待官方版本——没有ETA。
// ffpatch.c
// Edits the specified Firefox .sqlite file.
// Changes 0x0202 to 0x0101 at offset 18/19.
// BEFORE
// 0000000 S Q L i t e f o r m a t 3 \0
// 0000020 004 \0 002 002 \0 @ \0 \0 005 034 \0 \0 \0 N
// AFTER
// 0000000 S Q L i t e f o r m a t 3 \0
// 0000020 004 \0 001 001 \0 @ \0 \0 005 034 \0 \0 \0 N
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#define PROGNAME "ffpatch"
#define MY_OFFSET 18
int main (int argc, char *argv[])
{
int fd;
char buf[2];
off_t offset;
ssize_t wsize;
if (argc != 2)
{
fprintf(stderr, "usage: %s sqlite-file\n", PROGNAME);
exit(1);
}
if ((fd = open(argv[1], O_RDWR)) == -1)
{
fprintf(stderr, "cannot open %s\n", argv[1]);
exit(1);
}
if ((offset = lseek(fd, MY_OFFSET, SEEK_SET)) != MY_OFFSET)
{
fprintf(stderr, "lseek() failed\n");
exit(1);
}
buf[0] = 1;
buf[1] = 1;
wsize = write(fd, buf, 2);
close(fd);
exit(0);
}