解决ArcEngine,Oracle相关的系统64位Win7部署问题的整个过程
一个业务系统,使用到了ArcEngine库,访问数据库为Oracle,开发语言为C#,开发IDE以及打包的工具都是Visul sduio 2008。ArcEngine库是ArcGIS针对二次开发组成的一个库,以Com组件的形式提供。
本以为这是一个比较简单的问题,但照实的耗费了我两个星期左右的时间,当然这两个星期里面也在干很多别的活。
在此问题发生之前,我知道,.Net会默认会把系统编译成AnyCpu,生成中间语言,然后部署的机器上运行的时候,才根据具体的机器的cpu的型号生成相应的运行代码。
1.在机器上安装Oracle 32位的客户端程序,编译客户端的时候,编译成any cpu的。
这种方案是我们首先尝试的方案,对他能运行起来的希望就不是太大,但这些都是现成的,运行不起来,也可以看一下报的什么错误。再测试连接数据库的时候,提示系统以64位模式运行,而Oracle库位32位,调用失败(大概就是这个意思)。
我们在这个过程可以得到以下结论:
(1).Oracle Client 32位可以在64位的Win7下安装,但能否正常运行还未知。
(2).如果Oracle Clinet 也会死64位的话,系统能够正常运行起来的可能性很大。
2.下载Oracle Clinet 64位,安装,测试。但整个过程在安装过程中老是提示安装不上。测试失败,就没有接着尝试。又想到访问Oracle又很多种访问方式,oledb也会死一种访问方式,这样可以脱离Oracle CLinet,就不存在Oracle客户端和系统位数不匹配的问题了。
3.把系统访问数据库的相关的连接方式修改为Oldeb,重新测试,还是测试失败,提示的错误信息和第一次尝试差不多。后来到网上找才发现,Oledb的访问方式也必须再机器上安装Oralce客户端。这个是我以前没有注意到的。
通过这次尝试,知道了:
访问Oracle数据库必须以来Oracle客户端,完全不用的方案在网上似乎还没有。当然如果有哪位兄弟知道,看了本文章后一定要告诉小弟。
4.放弃连接数据库的方式,还是改位Oracle Clinet方式。和别人要了一个Oracle Clinet 的64位的安装包,顺利安装,但测试数据库连接的时候还是错误,但提示的信息已经不一样,再网上搜了一下,说是以前机器上装的Oracle可能没有卸载干净,会出现这样的问题。很崩溃,没办法,又换了另外一台win7的机器,但那台机器上一级装了32位的Oracle。
5.为了仔细了解错误的原因,我在Win7上安装了开发环境,首先我先测试了一些最简单的,看看是不是ArcEngine有什么问题。使用了一个ArcEngine自带的例子,运行,错误。这下我就有点郁闷了,连接数据库的问题还没有解决,连ArcEngine也运行不起来?马上我又想到,ArcEngine是不是也有64位的,而我平常用的都是32位的?于是我把编译选项设置为X86,运行,成功。看来确实是ArcEngine位数的原因。那ArcEngine有没有64位的?到网上找了一下,答案是没有,ESRI官网给的解决方案也是使用X86进行编译。这样一来,我就发现现在研究Oracle Clinet 64位已经没有意义了,因为我们的系统只能编译成32位的即X86。
因为我们的系统需要用我们自己写的C++ COM组件,需要手工注册,我们再同一级目录下写了一个bat文件,用来注册,但现在怎么也注册不上。后来查到,在win7中注册必须使用全路径,不能使用相对路径。修改了绝对路径后,注册成功。
6.最终确定使用Oracle Clinet 32位,程序也编译成32位。在开发环境中编译,再连接数据库时,又是失败,而且失败的原因和以前都不一样,到网上查找后发现,由于Win7的用户权限比较复杂,需要在系统系统的时候以管理员身份启动。我就右键点击VS的快捷方式,点击以管理员身份启动,把项目加载进来。运行,连接数据库成功。呵呵,很激动。看来现在遇到的问题已经不是64位的问题了,而是win7的问题。连接数据库,使用ArcEngine库,使用com组件,都成功,看来形势一片大好。解决就打包,但打完包,安装后,直接双击运行出错。忽然想起来要用管理员权限运行,就进入到安装目录,右键点击主exe,以管理员权限运行,但还是有问题,太奇怪了。
.net程序打包部署无非是把Relase下面的文件压缩一下,然后再解压出来,应该没什么问题啊?我把Debug文件夹拷到桌面上,运行,没问题。又把Debug文件夹拷到安装目录的同一级下,运行,出错。
看来和路径有关。我又看了一下默认的安装路径,C:\Program Files (X86)\公司简称\产品名称\,难道是()或是空格的问题?因为很多工具都对空格或是()这样的字符敏感,不支持这样的安装路径。
7.卸载系统后,再次安装,把安装目录下的()去掉。安装目录下,以管理员权限运行,连接数据库成功,启动主程序也成功,看来确实是()的问题。后来又发现以兼容模式运行也可以成功运行,并且在运行一次后可以把兼容模式的配置信息保存下来,下次直接双击即可。
至此整个问题已经解决。
后来想在安装的时候判断一下,如果是win7操作系统,并且安装目录有(),就提示用户在WIn7下,安装路径不能存在()。但这个问题搞了一下午,没搞出来,而且这个也不是太最要,还有很多别的事要做,使用者就十个人左右,告诉他们一下就可以了。
ps:现在64位WIn7还比较少,之所以我那么曲折的解决这个问题,而且很多为什么还都不知道,主要因为我自己对WIn7和64位就不了解。但大多说情况下,64位机器还都是被当成服务器用,很少当成pc机用,但有很多大单位,事业单位已经都是使用的64位的机器了,而且配置超好...
整个过程主要是记录我解决这个问题的步骤,其他的就没什么了,对熟悉Win7和64位的兄弟来说,更是小菜一碟。我写着句话主要是害怕没吐口水。。呵呵。。
页:
[1]