20楼#
发布于:2007-12-24 12:24
菜鸟我今天虽然还是没做出什么东西,不过已经有了一点新收获。
DIFx是一个开发包,用于开发驱动安装程序的。它应该也是封装了UpdateDriverForPlugAndPlayDevices,SetupDIXXXX等函数。它有现成的64bit的版本。 Installshield可以选择支持64bit的DIFx,那么我就可以直接使用DIFX提供的函数进行安装了。这是方法1。 而假如我还是要用自己公司原本那个dll进行安装,首先我要先把DLL编译成64bit的。而IS生成的Setup.exe是64bit的,它无法加载我这个64bit的dll,我必须在IS中LauchApp,启动一个64bit的exe,这个exe再加载我的dll。这是方法2。 方法2比较繁琐,但是好处是这个DLL已经有现成的,我只需编译成64bit的,并且可能要修改一些不适应64bit OS的地方。 方法1是比较简单的,缺点是DIFx这个开发包没有用过,可能会遇到一些困难。 anyway,知道了做法就可以试试了,想起来这个周末我的茫然,没头苍蝇一般的瞎折腾,这样已经很好了。想起我之前试图想编译一个64bit的setup.exe的思路,真是惭愧啊。 |
|
21楼#
发布于:2007-12-24 12:36
奇怪啊,我写了一大段怎么发不出?
今天虽然菜鸟米有做出什么来,不过已经有了不少长进,至少有点想法了。 前文所说,菜鸟的那个dll,调用UpdateDriverForPlugAndPlayDevices失败。因为调用进程是32bit的。这样是不行滴~ 菜鸟傻乎乎的想把用Installshield编译出的setup.exe,编译成64bit的,再把那个安装dll也编译成64bit的。 但是dll好编译,setup怎么办呢?我又不熟悉IS。 于是周末一直在瞎折腾这个事情。 今天早上跟一个朋友聊起来,在他的帮助下,终于建立了一点概念(惭愧啊,他就是上午帮我看了下Installshield的文档而已)。 首先DIFx这是一个开发包,可以用于开发驱动安装程序,它估计也是通过封装UpdateDriverForPlugAndPlayDevices,SetupDiXXX等函数实现的。在IS里,可以直接配置为要支持DIFx 64bit。这样就可以在脚本里直接调用这个开发包提供的函数来完成安装了。 而我们公司原来那个dll,要想用,还是要把它编译成64bit的,然后在IS里lauchapp一个64bit的EXE,这个EXE再加载那个dll,通过调用dll里的安装函数完成安装。 这两种方法前者方便,但是缺点是DIFx这个工具我没用过。后者繁琐笨拙,好处是DLL是现成的,可能需要修改有些不适合64bit操作系统的地方。 anyway,有了正确的方法,再难实现的东西也能做得出来,而没有方法,那就是没头苍蝇啊! 周末我浪费了两天时间,一直在瞎折腾IS,真是惭愧啊~~~ 另外,菜鸟还是米有找到ERROR_IN_WOW64在哪里定义,不过万能的google告诉我,它就是0xE0000235。。。 |
|
22楼#
发布于:2007-12-24 12:37
以为没有发出去上面那段,结果是因为分页了,5555555555,又写了那么多,天哪
|
|
23楼#
发布于:2008-01-14 23:29
很久没有看到这么好的贴了,都不愿意上驱网来了。看来还是时不时来一下好。
|
|
24楼#
发布于:2008-01-16 09:04
菜鸟很久没更新了,细细。
总而言之,菜鸟的自动安装程序做好了。这其中遇到了不少问题,不过都不是原则性的。 总的方法就是在Installshield里头,lauch一个进程,这个进程是64bit的,在这个进程里头,通过调用UpdateDriverFor...以及SetupDi等一系列函数完成安装。 Installshield很奇怪,它要求这个进程必须是有窗口的,窗口可以隐藏,但不能没有,否则IS不会等待这个进程结束再返回,而是立即返回。 目前整个安装还算顺畅。唯一我无法解释的就是,有时候安装不会成功,UpdateDriverFor...这个函数返回FALSE,错误原因是找不到INF文件,但INF文件明明存在。此时只要手工修改一下INF文件,随便敲个空格什么的,则安装就一定会成功。 于是我在调用UpdateDriverFor...之前,改变INF文件的最后修改时间这一属性,改成当前系统时间,但是这样做没用。 最后,我干脆每次调用UpdateDriverFor...之前,打开inf文件,写个空格进去,再关闭,这样一来则安装每次都不会有问题。 我知道自己这样蛮无耻的,但是,呃,我确实没找到什么相关资料,不知道为什么会这样,也想不到好的解决办法来的。。。。 |
|
25楼#
发布于:2008-01-21 10:36
good boy
不错的文章~~ |
|
|
26楼#
发布于:2008-01-21 20:25
I am not a boy!!! |
|
27楼#
发布于:2008-01-23 11:34
数字签名和证书是怎么回事,怎么解决的阿
能不能给俺们这些菜菜鸟讲一讲? 先谢了 |
|
28楼#
发布于:2008-01-23 21:24
数字签名和证书的东西蛮简单的,
就是说,你要花钱买个证书,包括私钥和公钥,然后用SignTool这个工具,利用买到的证书,给sys加一个数字签名,签名之后,64bit的vista才好用。否则必须每次启动系统的时候修改选项,关掉“禁用未经签名的驱动”。 要买的证书是verisign公司的,不过假如嫌直接跟老外联系太麻烦,也可以找代理,我找的是wosign这个代理公司。证书买到,他们的技术支持会教你怎么做签名的。我只给sys做了签名,没有做cat文件签名,因为我不知道cat文件干嘛用的@_@买证书费用大概是一年3900左右。 大概就是这些啦。 |
|
29楼#
发布于:2008-01-24 14:38
谢谢!
诲人不倦的精神很让人感动 哈哈 [希望你再接再厉,让大家多分享些你的宝贵经验 |
|
30楼#
发布于:2008-01-25 10:37
呵呵,受教了,非常感激,我也遇到了客户提出的要把软件升级到VST的需求,可那一堆驱动啊,想着都头疼呢。
好贴啊,代表中国人民感谢你 |
|
|
31楼#
发布于:2008-01-29 09:20
楼上的同学太客气了,我就是只菜鸟,写出来也不怕丢人,细细。
现在客户有了新要求,要求所有的dll,配置程序都是64bit的 我现在又开始了不屈不饶的移植了。 这些都是用户模式代码,我就用了vs2005编译。基本没啥大问题。 |
|
32楼#
发布于:2008-01-29 10:20
感谢:)
|
|
33楼#
发布于:2008-01-30 09:17
我去年开发了64bit驱动, 如果早看到这个帖子就好了,可以给你一点经验.
我是WinXP32bit+2003DDK开发的Vista64bit驱动, DLL是32位的, InstallShield做 的Setup也是32位的,实际我在Win98-Vista都是一个安装程序. 证书我没买,做了一个自己的, 直接设置成调试模式(不用开机按F8,不过原理一样). |
|
34楼#
发布于:2008-01-30 09:20
啊啊啊啊啊!
楼上的同学抓住!还在么????? |
|
35楼#
发布于:2008-01-30 09:22
你的安装程序没改么?
假如安装进程不是64bit的 UpDateDriverXXX这个函数不会成功啊。 设置成调试模式,是不是就是把OS搞成Test Mode? 能否加我msn啊? mengjin0321@hotmail.com |
|
36楼#
发布于:2008-01-30 10:52
我根本没有用UpDateDriverXXX, 呵呵
|
|
37楼#
发布于:2008-04-25 11:06
楼主写得不错,其实也不用太过谦了,大家都是从菜鸟过来的嘛!
|
|
38楼#
发布于:2008-05-07 14:03
mengji,您好!
小弟目前也准备把32bit的sys,移植到64bit的OS中。遇到个问题,能否指导一二。 开发环境:WinXP32bit+2003DDK+DriverStudio 但是在编译时就遇到问题。 选Build->Batch Build时选"Select AMD64"选项不起反应。 是不是得在64bit的OS中装2003DDK+DriverStudio编译? 但是我在64bit的OS中装DriverStudio后在VC6中并没有"DriverStudio"的选项。 谢谢! |
|
39楼#
发布于:2008-07-14 21:58
为什么不更新了?
|
|