我现有一个PCI设备的inf文件和sys文件,当插入PCI设备时,通过windows的“找到新的硬件向导”手动定位inf文件和sys文件的位置后,驱动可以正常安装,不会出现任何问题。现在我想用innosetup制作一个驱动自动安装程序,我的innosetup的代码如下:
[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{55E05019-0051-427E-A2A6-8A39017B5716}
AppName=我的程序
AppVerName=我的程序 1.5
AppPublisher=我的公司
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Icons]
Name: "{group}\{cm:UninstallProgram,我的程序}"; Filename: "{uninstallexe}"
[Files]
Source: "8940a1.inf" ;DestDir: "{app}\driver";
Source: "8940a1.sys" ;DestDir: "{app}\driver";
Source: "adtcard.sys" ;DestDir: "{app}\driver";
Source: "8940a1.dll" ;DestDir: "{app}\driver";
Source: "8940a1m.dll" ;DestDir: "{app}\driver";
[Run]
Filename: {sys}\rundll32.exe; Parameters: "setupapi,InstallHinfSection DDInstall_8940a1.NT 132 {app}\driver\8940a1.inf";WorkingDir:{app}\driver;Flags: 32bit;
运行用上述代码生成的安装程序后,在设备管理器查看硬件时总会出现黄色感叹号,但PCI设备可以正常使用,点击设备管理器中的“扫描检测硬件改动”,系统仍然弹出“找到新的硬件向导”对话框,让用户安装驱动,也就是说系统仍然认为PCI设备没有安装驱动,恳求大神们帮我看看,到底问题出在哪里了,小弟不胜感激!!下面也给出inf文件的内容:
;===========================================================
; File : 8940a1.inf
;
; Abstract: Windows 98/2000/XP INF for ADT-8940A1 boards .
;
; (c) Copyright 1998-2004 Adtech Technology, Inc.
;
;===========================================================
[Version]
Signature = $CHICAGO$
Provider = %ADT%
Class =Adtech
ClassGUID ={c671678c-82c1-43f3-d700-0049433e9a4b}
DriverVer = 11/26/2008, 1.1.0.0
[ClassInstall32]
AddReg = AdtechClassAddReg
[AdtechClassAddReg]
HKR,,,,"Adtech Motion Boards"
;-----------------------------------------------------------
; Driver information
;-----------------------------------------------------------
[Manufacturer]
%ADT% = ADT.Mfg
[ADT.Mfg]
"ADT-8940A1 Motion Card" = DDInstall_8940A1, PCI\VEN_1022&DEV_8942
;-----------------------------------------------------------
; General installation section
;-----------------------------------------------------------
[CopyFiles_8940A1]
8940a1.sys,,,2
adtcard.sys,,,2
8940A1.dll,,,2
8940A1m.dll,,,2
;-----------------------------------------------------------
; Windows 2000 installation section
;-----------------------------------------------------------
[DDInstall_8940a1.NT]
AddReg = AddRegistry_NT_8940a1
CopyFiles = CopyFiles_8940a1
[DDInstall_8940a1.NT.Services]
AddService = 8940a1, 0x00000002, Service_Inst_8940a1, EventLog_Inst_8940a1
[AddRegistry_NT_8940a1]
[Service_Inst_8940a1]
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 0 ; SERVICE_ERROR_IGNORE
ServiceBinary = %10%\System32\8940a1.sys
;-----------------------------------------------------------
; Windows 98 installation section
;-----------------------------------------------------------
[DDInstall_8940a1]
AddReg = AddRegistry_8940a1
CopyFiles = CopyFiles_8940a1
[AddRegistry_8940a1]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,8940a1.sys
HKR,,ErrorLogLevel,0x00010003,2
;-----------------------------------------------------------
; Event log registry entries
;-----------------------------------------------------------
[EventLog_Inst_8940a1]
AddReg = EventLog_AddReg_8940a1
[EventLog_AddReg_8940a1]
HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\8940a1.sys"
HKR,,TypesSupported,0x00010001,7
;-----------------------------------------------------------
; Source file information
;-----------------------------------------------------------
[SourceDisksNames.x86]
1 = %InstallDisk%,"",1
[SourceDisksFiles]
8940a1.sys = 1
adtcard.sys=1
8940A1.dll=1
8940A1m.dll=1
[DestinationDirs]
DefaultDestDir = 10, System32 ;10 = %Windir%
;-----------------------------------------------------------
; String information
;-----------------------------------------------------------
[Strings]
InstallDisk = "ADT-8940A1 Windows Driver Installation Disk"
ADT = "Adtech Technology, Inc."
------解决思路----------------------
“在设备管理器查看硬件时总会出现黄色感叹号,但PCI设备可以正常使用”
这个信息肯定是有问题的。
如果有黄色感叹号,设备肯定是不能用的。
看看系统的Log信息,看看驱动安装情况怎么样:
$(Windows)\inf\setupapidev.log
------解决思路----------------------
手动安装成功,说明inf 文件没问题,是你的inno setup中安装[RUN]中的安装驱动的命令参数有问题,就是这个地方:
[Run]
Filename: {sys}\rundll32.exe; Parameters: "setupapi,InstallHinfSection DDInstall_8940a1.NT 132 {app}\driver\8940a1.inf";WorkingDir:{app}\driver;Flags: 32bit;