请问大家用AU3写智能显卡检测安装的问题?(已经解决)
本帖最后由 yiruirui 于 2010-7-12 11:30 编辑我写了一个智能显卡检测安装工具,用的是Everest检测的,检测可以成功实现.
就是显卡驱动安装好了后没有反应,不知道是哪里出错了,我用的7Z压缩包,里面包含的是驱动内容,其实就是解压驱动到指定目录,然后向注册表写一句话,请问大家我这样哪里错了,贴出关键代码如下:
Func Button1Click()
;开始循环智能判断设备驱动
Disable_all()
Dim $filepath_string
$tmp_path = ""
For $i = 1 To $DrvList
If GUICtrlRead(Eval("Checkbox" & $i)) <> $GUI_CHECKED Then ContinueLoop ;如果未选择则进入下一个循环
$AutoCheckDrv = StringSplit($DrvList[$i], ";")
If $AutoCheckDrv > 1 And StringInStr($All_keyname,$AutoCheckDrv)>0 Then ;如果需要智能判断且字段名没有错误则进入
$device_keyword = IniReadSection($Cfg_file, $AutoCheckDrv)
For $j = 3 To $AutoCheckDrv
$Device_Drv = IniRead($EvePath & "\Reports\report.ini", $AutoCheckDrv, $AutoCheckDrv[$j], "") ;读取报告
$Device_Drv = CleanKeword($Device_Drv) ;清除无效关键字
If StringLen($Device_Drv) < 1 Then ContinueLoop ;如果硬件信息中无内容则继续判断下一个
For $k = 1 To $device_keyword
If $device_keyword[$k] = "other" Then ContinueLoop ;如果关键字是other则退出循环
If StringInStr($Device_Drv, $device_keyword[$k]) <> 0 And Not (StringInStr($filepath_string, $device_keyword[$k])) Then
$filepath_string = $filepath_string & ";" & $device_keyword[$k]
$tmp_path = $tmp_path & ";" & $device_keyword[$k]
EndIf
Next
Next
If StringLen($tmp_path) < 1 Then ;如果未搜索到相应的驱动;则加入other
$temp1 = IniRead($Cfg_file, $AutoCheckDrv, "other", "")
If FileExists(@ScriptDir & "\" & $temp1) Then $filepath_string &= ";" & $temp1
$temp1 = ""
EndIf
Else ;如何不需要自动判断则加入解压列表
$filepath_string &= ";" & $AutoCheckDrv
EndIf
Next
;解压所需驱动
;MsgBox(4096, "所需解压的驱动", "路径为:" & $filepath_string & @CRLF)
GUICtrlSetData($Progress1,0) ;滚动条归零
$ext_tmp = StringSplit($filepath_string, ";") ;获得各文件路径数组
For $i = 1 To $ext_tmp
If StringLen($ext_tmp[$i]) > 0 Then
GUICtrlSetData($lab2, "正在解压:" & @ScriptDir&"\"&$ext_tmp[$i])
unzip(@ScriptDir&"\"&$ext_tmp[$i], $Ex_path) ;调用unzip函数进行解压缩
GUICtrlSetData($Progress1,Round(($i/$ext_tmp)*100)-5) ;滚动条前进
EndIf
Next
GUICtrlSetData($Progress1,95) ;滚动条前进
;将驱动路径写入注册表
If Stringlen($filepath_string) > 0 Then
GUICtrlSetData($lab2, "正在将驱动路径写入注册表,请稍等...")
$driver_path = '%SystemRoot%\Inf' & DevicePath($Ex_path)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "DevicePath", "REG_EXPAND_SZ", $driver_path) ;加入新记录
EndIf
GUICtrlSetData($Progress1,100) ;滚动条前进
GUICtrlSetData($lab2, "驱动已成功写入注册表,正在退出...")
DirRemove($EvePath, 1)
Sleep(1500)
Exit ;退出程序,多余文件删除在 EndsSript() 中进行
EndFunc 代码中未见“setup -newsetup”,驱动未安装。
加入代码:RunWait(@SystemDir"\setup -newsetup -mini") 回复 2# 3mile
多谢你的回答,但是都是一些7Z格式的驱动压缩包,没有这个安装文件啊,请问驱动智能选择安装工具实现细节是则样的?我只有一些纯驱动包7Z格式的,直接用AU3解压缩到某个目录,这样不可以,请问为什么?该如何实现? 你的代码中用UNZIP进行解压,难道不会改成7Z解压吗? 回复 4# 3mile
有用7Z解压缩的,你的回答还没到点子上,我是想问,解压缩后的这些纯驱动如何安装,这个才是关键所在,不过仍然谢谢你的热情回答。 我在2楼不是已经回答了吗? 回复 6# 3mile
谢谢,我的纯驱动里面没有你在2楼说的那个文件啊? LZ可以在网上搜索下 devcon.exe 或者 dpinst.exe 的应用例子 "WINDOWS\SYSTEM32\SETUP.EXE -newsetup -mini" 感谢大家回答,问题就如 afan所说那样解决的。 RunWait('rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 inf的完整路径')
页:
[1]