当前位置: 代码迷 >> 驱动开发 >> 用innosetup制作PCI驱动程序自动安装包出现有关问题,PCI驱动是通过inf文件来安装的
  详细解决方案

用innosetup制作PCI驱动程序自动安装包出现有关问题,PCI驱动是通过inf文件来安装的

热度:305   发布时间:2016-04-28 10:00:42.0
用innosetup制作PCI驱动程序自动安装包出现问题,PCI驱动是通过inf文件来安装的
我现有一个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;