阅读:9750回复: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] |
|
最新喜欢:![]() |
沙发#
发布于:2009-12-05 11:30
![]() |
|
板凳#
发布于:2004-12-06 20:44
向tigerL和网友请教另一问题。有两种安装USBKEY驱动程序方法 我想应该是可以的,不过我也没试过。 |
|
|
地板#
发布于:2004-12-06 20:30
我调用的应该是ANSI版的,这样有问题吗? 这个很有可能会产生影响。网上似乎有报告ansi版调用bug的文章。 试试unicode版。 |
|
|
地下室#
发布于:2004-12-06 17:36
Song1118 :
还没有呢,希望多交流! |
|
5楼#
发布于:2004-12-06 17:22
向tigerL和网友请教另一问题。有两种安装USBKEY驱动程序方法
1.先安装USBKWY驱动程序,后插key,能正确识别设备。 2.先插key,后安装驱动程序,则需要拔key后重新插上才能识别。有没有办法能解决先插key后安装驱动程序也能识别key呢?我看了MSDN中对“pdateDriverForPlugAndPlayDevices”函数的描述为 “This function can also be used to determine whether the device with the specified HardwareId value is plugged in”。但我试了却不成功。 [编辑 - 12/6/04 by blackcourser] |
|
6楼#
发布于:2004-12-06 16:57
Hi, blackcourser,
你在xp下做成功了吗? |
|
7楼#
发布于:2004-12-06 16:47
tigerL :
没有用什么更好的方法。根据你所给说的,我觉得我们的INF一定有问题。因为做驱动程序的人走了,我不太了解他写的INF文件,只能全改了,改后的INF如下: [Version] Signature="$CHICAGO$" Class=USB provider=%PR% [Manufacturer] %MfgName%=zhehui [JETWAY] %USBVID_1463&PID_05CB.DeviceDesc%=usbkey, USBVID_1463&PID_05CB [SourceDisksNames] 1=%DiskName%,,1 [SourceDisksFiles] usbkey.sys usbkey.inf [DestinationDirs] usbkey.SysCopy = 10,System32Drivers [DefaultInstall] AddReg=usbkey.AddReg [usbkey] AddReg=usbkey.AddReg [usbkey.NT] AddReg=usbkey.AddReg.NT [usbkey.NT.Services] Addservice = usbkey, 0x00000002, usbkey.AddService [usbkey.AddService] DisplayName = %usbkey.SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 2 ; SERVICE_AUTO_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %12%usbkey.sys ;LoadOrderGroup = Base [usbkey.AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,usbkey.sys [usbkey.SysCopy] usbkey.SYS,,,0x00010020 [Strings] PR="zh" MfgName="zhehui" ClassName="Usb Key" USBVID_1463&PID_05CB.DeviceDesc="usbkey Key" usbkey.SvcDesc="usbkey driver" 修改后,可完全实现你在另“usb驱动自安装程序的制作 ”一文中所说的1、2、3步。 [编辑 - 12/6/04 by blackcourser] [编辑 - 12/6/04 by blackcourser] |
|
8楼#
发布于:2004-12-06 09:32
我调用的应该是ANSI版的,这样有问题吗?
|
|
9楼#
发布于:2004-12-04 18:12
1,正常情况是不需要使用SetupDiBuildDriverInfoList的,
2,你调用的是SetupDiEnumDriverInfo的ANSI版还是UNICODE版? |
|
|
10楼#
发布于:2004-12-03 21:18
对不起我忘说了,SetupDiBuildDriverInfoList我也加上了,还是枚举不到任何东西。是不是还有别的错误呢?恳请指教。谢谢
DWORD __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: { FILE* p = fopen("c:\\inst.log", "a+"); if(!SetupDiBuildDriverInfoList( DeviceInfoSet, NULL, SPDIT_CLASSDRIVER )) { fprintf(p, "Build Driver info list failed\n"); break; } DWORD dwMemIndex = 0; do { SP_DRVINFO_DATA DriverInfoData; memset(&DriverInfoData, 0, sizeof(DriverInfoData)); DriverInfoData.cbSize = sizeof(DriverInfoData); if(!SetupDiEnumDriverInfo(DeviceInfoSet, NULL, SPDIT_CLASSDRIVER , dwMemIndex, &DriverInfoData)) { DWORD err = GetLastError(); if(err == ERROR_NO_MORE_ITEMS) { fprintf(p, "no more items\n"); } else { fprintf(p, "break at err:%u\n", err); } break; } SP_DRVINSTALL_PARAMS DriverInstallParams; if(SetupDiGetDriverInstallParams(DeviceInfoSet, DeviceInfoData, &DriverInfoData, &DriverInstallParams)) { DriverInstallParams.Rank = 0; if(SetupDiSetDriverInstallParams(DeviceInfoSet, DeviceInfoData, &DriverInfoData, &DriverInstallParams)) { fprintf(p, "made at %u\n", dwMemIndex); } else { fprintf(p, "failed at %u\n", dwMemIndex); } } dwMemIndex ++; }while(1); SetupDiDestroyDriverInfoList( DeviceInfoSet, NULL, SPDIT_CLASSDRIVER ); fclose(p); } break; default: break; } return Status; } |
|
11楼#
发布于:2004-12-03 18:56
那是肯定的了,你自己好好找找吧。
|
|
|
12楼#
发布于:2004-12-03 15:49
Hi, TigerL
我跟踪了一下CoInstaller发现SetupDiEnumDriverInfo 枚举不到任何东西,直接返回了false,GetLastError()是ERROR_NO_MORE_ITEMS。是不是还有问题? 参数SPDIT_CLASSDRIVER 和SPDIT_COMPATDRIVER 都试了。 |
|
13楼#
发布于:2004-12-03 12:13
谢谢tigerL及其他热心的朋友。我的问题已经解决了。我依照MSDN中INF文件的相关说明重新编写了INF文件,安装即可成功。 blackcourser一定是有更好的办法了! |
|
|
14楼#
发布于:2004-12-03 11:59
另外很弱的问一句:我要怎样才能跟踪到那个dll呢? 可能是coinstaller没起作用,用softice可跟踪。 |
|
|
15楼#
发布于:2004-12-03 10:17
你能帮我看看我的问题出在那里了吗?谢谢!
|
|
16楼#
发布于:2004-12-02 23:04
谢谢tigerL及其他热心的朋友。我的问题已经解决了。我依照MSDN中INF文件的相关说明重新编写了INF文件,安装即可成功。
[编辑 - 12/2/04 by blackcourser] |
|
17楼#
发布于:2004-12-02 19:20
另外很弱的问一句:我要怎样才能跟踪到那个dll呢?
|
|
18楼#
发布于: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" |
|
19楼#
发布于:2004-12-02 19:05
1,确认HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\CoDeviceInstallers是否有你的新setup类的项;
2,跟踪你的coinstaller,看是否调用了; 3,如若还不行,请贴出inf。 |
|
|
上一页
下一页