阅读:9748回复:36
预安装usb驱动程序的问题
按网友所说:win2000系统
1)通过INSTALLSHIELD 脚本实现拷贝test.inf test.sys到系统相应目录下并执行 szProgram = "rundll32.exe"; szCmdLine = "setupapi.dll,InstallHinfSection DefaultInstall 132" + SUPPORTDIR + "test.inf"; LaunchAppAndWait(szProgram, szCmdLine, WAIT); 其中SUPPORTDIR指定为text.inf所在的目录。跟踪执行到LaunchAppAndWait时弹出对话框“安装失败”, 但LaunchAppAndWait函数的返回值却为0(0表示该函数成功执行)。 驱动安装不成功。 2)同样通过INSTALLSHIELD 脚本调用devcon install "d:test.inf" USB\VID_xxx 执行时却要求插入安装盘,手工指定*.sys安装后显示不成功,硬件设备中给出惊叹号。 不知是何原因,希望能得到大家的帮助! [编辑 - 11/26/04 by blackcourser] |
|
最新喜欢:![]() |
沙发#
发布于:2004-11-28 21:44
你的问题我没碰到过,但usb设备驱动的安装程序我却做过。很简单,把inf和sys放在同一目录下(注意注释掉inf中的SourceDisksFiles和SourceDisksNames两节),然后调用SetupCopyOEMInf即可。
|
|
|
板凳#
发布于:2004-11-29 15:57
to:tigerL 谢谢回复!
你说的情况试过,仍有问题: 注释掉inf中的SourceDisksFiles和SourceDisksNames后,调用setupCopyOEMInf系统要求指出*.sys的路径。 按某网友所说将[USBKEY.Dev]和[USBKEY.Dev.NT]中都指定为绝对路径还是不行。 [USBKEY.Dev] CopyFiles=%10%\System32\Drivers\test.Files.Ext, %10%\inf\test.Files.Inf AddReg=USBKEY.AddReg [USBKEY.Dev.NT] CopyFiles=%10%\System32\Drivers\test.Files.Ext, %10%\inf\test.Files.Inf AddReg=USBKEY.AddReg 不知是何原因。 [编辑 - 11/29/04 by blackcourser] [编辑 - 11/29/04 by blackcourser] |
|
地板#
发布于:2004-11-29 21:47
to:tigerL 谢谢回复! 调用setupCopyOEMInf没问题吧,是插上设备后弹出窗口说某某路径下没有*.sys文件吗? |
|
|
地下室#
发布于:2004-11-30 11:53
to:tigerL
我在几台没有装过该USB驱动的电脑上试验,调用setupCopyOEMInf没有问题,安装显示成功,并要求重启,但重启后设备中有黄色惊叹号。查看INF和system32drivers下均没有相应的test.inf和test.sys文件,请分析是何原因。 MSDN中对setupCopyOEMInf函数的解释为“拷贝INF文件到系统%windir%/Inf目录下”。手工拷贝后亦不能执行。 但如果完全通过手工安装即“插卡,系统识别USB设备,要求指定*.inf和*.sys文件路径”则一切正常。请问你是否了解手工安装时系统都做了那些操作? 有QQ吗?我的是58369915,如果可以请加我。 [编辑 - 11/30/04 by blackcourser] |
|
5楼#
发布于:2004-11-30 15:40
请问您解决问题了吗?我也遇见了同样的问题,能告诉我怎么解决吗?
|
|
6楼#
发布于:2004-11-30 18:11
to :Song1118
没有呢。试了很多方法都不行。 |
|
7楼#
发布于:2004-11-30 22:17
to:tigerL 1,inf和drivers目录下没有test.inf和test.sys是对的。setupCopyOEMInf会在inf目录下生成一个oem*.inf。找找看有没有? 2,产生黄色惊叹号的原因很多,你在设备的属性页中察看一下“驱动程序详细信息”,看看驱动程序安装了没有?(我估计驱动程序没装上) 3,正常情况下,执行setupCopyOEMInf安装usb是不会要求重启的。 4,可能与你的inf文件有关,如果可能,请把你的inf贴出来。 |
|
|
8楼#
发布于:2004-12-01 10:30
to:tigerL
[Version] Signature="$CHICAGO$" Class=SmartCardReader ClassGuid={50DD5230-BA8A-11D1-BF5D-0000F805F530} provider=%PR% DriverVer=11/11/2003,1.0.1106.0 [SourceDisksNames] 1="usbkey Installation Disk",,, [SourceDisksFiles] usbkey.sys = 1 usbkey.inf = 1 ; ================= Class section ===================== [ClassInstall32] Addreg=SmartCardReaderClassReg [SmartCardReaderClassReg] HKR,,,0,%ClassName% HKR,,Icon,,-25 HKLM,"SoftwareMicrosoftCryptographyCalaisReaders",,, [Manufacturer] %MfgName%=zhehui [zhehui] %USBVID_1463&PID_05CB.DeviceDesc%=usbkey.Dev, USBVID_1463&PID_05CB [DestinationDirs] usbkey.Files.Ext = 10,System32Drivers usbkey.Files.Inf = 10,INF [usbkey.Dev] CopyFiles=usbkey.Files.Ext, usbkey.Files.Inf AddReg=usbkey.AddReg [usbkey.Dev.NT] CopyFiles=usbkey.Files.Ext, usbkey.Files.Inf AddReg=usbkey.AddReg [usbkey.Dev.NT.Services] Addservice = usbkey, 0x00000002, usbkey.AddService, usbkey.EventLog [usbkey.AddService] DisplayName = %usbkey.SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 2 ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%System32Driversusbkey.sys [usbkey.EventLog] AddReg = usbkey.AddEventLog.reg [usbkey.AddEventLog.reg] HKR,, EventMessageFile, 0x00020000, "%%SystemRoot%%System32driversusbkey.sys" HKR,, TypesSupported, 0x00010001, 7 [usbkey.AddReg] ;HKR,,DevLoader,,*ntkern ;HKR,,NTMPDriver,,usbkey.sys ;HKR,, AdapterType, 0, "0100" ;HKLM,"SystemCurrentcontrolsetServicesBulkUsbParameters","MaximumTransferSize",0x10001,4096 HKLM,"SystemCurrentcontrolsetServicesBulkUsbParameters","DebugLevel",0x10001,5 [usbkey.Files.Ext] usbkey.sys [usbkey.Files.Inf] usbkey.Inf ;---------------------------------------------------------------; [Strings] PR="zh" MfgName="zhehui" ClassName="SmartCardReader" USBVID_1463&PID_05CB.DeviceDesc="zh Key" usbkey.SvcDesc="usbkey PCSC driver" [编辑 - 12/1/04 by blackcourser] [编辑 - 12/1/04 by blackcourser] |
|
9楼#
发布于:2004-12-01 14:01
blackcourser, 你的devcon install "d:test.inf" USBVID_xxx 中应把HARDWARE ID做引号。
我也遇到出现惊叹号的问题,情况和你一样,手动可以,但DEVCON不可以。有一点我可以提示你,你找一下SYSTEM32下的SETUPAPI。LOG文件,可能有有用的东西。 |
|
|
10楼#
发布于:2004-12-01 16:00
用DEVCON自动安装USB设备可能行不通。我认为要自动安装的话,要做一个应用程序来修改注册表来实现。
|
|
|
11楼#
发布于:2004-12-01 16:58
lejianz:
谢谢你的建议,不过问题依旧 :( |
|
12楼#
发布于:2004-12-01 16:59
tigerL: 按你所说: 1.在干净的系统下,手工安装USB驱动程序能够成功。 2.恢复干净的系统,调用SetupCopyOEMInf却要求指定*.sys的目录(此时INF目录下已生成和*.inf内容一样的oem3.inf)。我将*.inf和*.sys两文件均拷贝到了同一指定目录下。如drvInstDir。 3.按系统要求将*.sys指定到drvInstDir下则安装成功。 能否帮分析一下原因,如何不需用户指定*.sys的路径。 [编辑 - 12/1/04 by blackcourser] |
|
13楼#
发布于:2004-12-02 14:08
blackcourser :
建议你: 1,注释掉如下两节: [SourceDisksNames] 1="usbkey Installation Disk",,, [SourceDisksFiles] usbkey.sys = 1 usbkey.inf = 1 2,把CopyFiles指令中的usbkey.Files.Inf 去掉。 |
|
|
14楼#
发布于:2004-12-02 17:21
Hi,tigerL!
我参照了您的两个帖子里的方法,目前windows2000上已经没有问题了。可是在xp下还是会弹出“发现新硬件”的问题。 是不是我的Co-Installer有问题呢? 我的代码如下,恳请您的指导。谢谢! __stdcall CoModifyRank ( IN DI_FUNCTION InstallFunction, IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN OUT PCOINSTALLER_CONTEXT_DATA Context ) { DWORD Status = NO_ERROR; switch (InstallFunction) { case DIF_SELECTBESTCOMPATDRV: { DWORD dwMemIndex = 0; do { SP_DRVINFO_DATA DriverInfoData; if(!SetupDiEnumDriverInfo(DeviceInfoSet, DeviceInfoData, SPDIT_COMPATDRIVER , dwMemIndex, &DriverInfoData)) { break; } SP_DRVINSTALL_PARAMS DriverInstallParams; if(SetupDiGetDriverInstallParams(DeviceInfoSet, DeviceInfoData, &DriverInfoData, &DriverInstallParams)) { DriverInstallParams.Rank = 0; SetupDiSetDriverInstallParams(DeviceInfoSet, DeviceInfoData, &DriverInfoData, &DriverInstallParams); } dwMemIndex ++; }while(1); } break; default: break; } return Status; } |
|
15楼#
发布于:2004-12-02 17:23
另外还有,我是使用自建的setup class。
|
|
16楼#
发布于:2004-12-02 18:22
1,很高兴听到你成功的消息!
2,协作程序我大致看了一下,应该没什么问题。 3,你注册了协作安装程序吗? |
|
|
17楼#
发布于:2004-12-02 18:52
我的确注册了,在预安装时那个未数字签名的警告都已经不弹出来了。
只是我插入USB线时,还是会发现新硬件,要安装一遍。 |
|
18楼#
发布于:2004-12-02 19:05
1,确认HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\CoDeviceInstallers是否有你的新setup类的项;
2,跟踪你的coinstaller,看是否调用了; 3,如若还不行,请贴出inf。 |
|
|
19楼#
发布于:2004-12-02 19:17
inf如下,谢谢
[Version] Signature="$CHICAGO$" provider=%Dibcom% LayoutFile=layout.inf Class=NewDeviceClass ClassGUID={CFFDB8EB-09DD-481e-899B-A7A4481B584E} ;[SourceDisksNames] ;1=%DiskName1%,,0 ;[SourceDisksFiles] ;dibload2.sys = 1 ;--------- ClassInstall/ClassInstall32 Section ------------------------------- ; Not necessary if using a standard class ; 9X Style [ClassInstall] Addreg=Class_AddReg ; NT Style [ClassInstall32] Addreg=Class_AddReg [Class_AddReg] HKR,,,,%DeviceClassName% HKR,,Icon,,"-18" [Manufacturer] %Dibcom%=Dibcom [Dibcom] %DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_04B4&PID_8613 ; FX2 hardware, virgin EEPROM %DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_10B8&PID_0BBA ; MOD3000B4 %DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_10B8&PID_0BC6 ; MOD3000P1 %DIBLOAD.DeviceDesc%=LOADER.Device, USB\VID_10B8&PID_0FA2 ; EVA3000MC1-D2 [PreCopySection] HKR,,NoSetupUI,,1 [DestinationDirs] LOADER.Files.Ext = 10, System32\drivers [LOADER.Files.Ext] dibload2.sys [ControlFlags] ExcludeFromSelect=* [LOADER.Device] AddReg=LOADER.AddReg CopyFiles=LOADER.Files.Ext [LOADER.Device.NT] AddReg=LOADER.AddReg CopyFiles=LOADER.Files.Ext [LOADER.AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,dibload2.sys [LOADER.Device.NT.Services] AddService = DIBLOAD2,0x00000002,DIBLOAD.ServiceInstall [DIBLOAD.ServiceInstall] DisplayName = %DIBLOAD.DeviceDesc% ServiceType = %SERVICE_KERNEL_DRIVER% StartType = %SERVICE_DEMAND_START% ErrorControl = %SERVICE_ERROR_NORMAL% ServiceBinary = %12%\dibload2.sys [Strings] SERVICE_KERNEL_DRIVER =1 SERVICE_DEMAND_START =3 SERVICE_ERROR_NORMAL =1 Dibcom="Dibcom SA" DIBLOAD.DeviceDesc="Dibcom USB2.0 adapter firmware loader" DiskName1="DiBcom USB Adapter Installation Disk" DeviceClassName="DVB Connection" |
|
上一页
下一页