最近在公司做了个ActiveX插件嵌在Web系统中,用到了SQLite数据库,
因为是在PC机开发,用的是32位的System.Data.SQLite.dll,
但是最近遇到问题了,在Windows 2008 Server中部署系统之后,
安装ActiveX插件之后,在使用SQLite时报错,诸如“加载失败”之类。
后来手动替换64位的System.Data.SQLite.dll后才暂时解决这个问题。但是如果部署了系统之后,访问系统的有32位系统,有64位系统,如何解决这个问题啊?
安装ActiveX插件都是安装在本地的,64位系统就不能加载32位的程序集了。
如何在64位系统加载32位DLL程序集呢?在此之前也网上查了好多资料,说了几种“解决方法”,
1.在编译时目标平台由 any CPU 改为 x86
2.将32位的System.Data.SQLite.dll复制到64位系统的C:\Windows\SysWOW64,
然后在cmd中 regsvr32 System.Data.SQLite.dll等等,试过了都不行,求助各位大大!!!
因为是在PC机开发,用的是32位的System.Data.SQLite.dll,
但是最近遇到问题了,在Windows 2008 Server中部署系统之后,
安装ActiveX插件之后,在使用SQLite时报错,诸如“加载失败”之类。
后来手动替换64位的System.Data.SQLite.dll后才暂时解决这个问题。但是如果部署了系统之后,访问系统的有32位系统,有64位系统,如何解决这个问题啊?
安装ActiveX插件都是安装在本地的,64位系统就不能加载32位的程序集了。
如何在64位系统加载32位DLL程序集呢?在此之前也网上查了好多资料,说了几种“解决方法”,
1.在编译时目标平台由 any CPU 改为 x86
2.将32位的System.Data.SQLite.dll复制到64位系统的C:\Windows\SysWOW64,
然后在cmd中 regsvr32 System.Data.SQLite.dll等等,试过了都不行,求助各位大大!!!
然后在cmd中 regsvr32 System.Data.SQLite.dll
注册32位DLL后请使用32位的IE尝试,在Program(x86)文件夹下的
当然,你如果觉得你的ActiveX控件没有问题,是64位机子的问题,你可以拿到32位机子去试下就知道了
手动换个64位的dll就可以了,我现在想让64位系统可以加载32位的dll,大家明白了没有啊?
对于.net程序有另一个解决办法,就是把64位的转换成32位的,实际上是any cpu的转成x86的。
详见我的博客http://blog.sina.com.cn/s/blog_4d2694ae0100nr97.html,这里有具体的使用方法。
我也想动态加载的,可是把64位的dll放到setup里面都不能编译通过,这样只能手动放到安装目录下,这样的话我都不要动态加载了to 18L
在64位机器上是能运行ActiveX插件,可是我这个插件还是用了别的dll程序,这个程序及分32位和64位的
因为32位的可以在64位上运行。
反之不可。我已用这种方法解决我的类似的问题。
可能是你配置的不对吧。
请再确认一下这个方法。
regsvr32 C:\Windows\SysWOW64\SQLite.dll
等上班了再去试试这个to 21L
文件名就已经带了命名空间的,其实regsvr32后面的整个就是文件名
假设引用 DLL 为 a.dll,我打算在程序目录下放置 a.x86.dll 及 a.x64.dll,程序启动时,立即判断 OS 位数,32 位则将 a.x86.dll 复制一份,命名为 a.dll;64 位同理。这样,保证程序运行正常的同时又得到一个 x86 & x64 自适应版本,对共享软件来说,是不错的思路。不过,还没测试,呆会测一下看看。