找回密码
 加入
搜索
查看: 11131|回复: 33

[系统综合] 如何检测安装过的软件

 火... [复制链接]
发表于 2010-9-6 10:15:34 | 显示全部楼层 |阅读模式
大家好,请问用AUTOIT script如何检测Windows已经安装的补丁或者软件?比如看系统有没有安装.net framework 2.0或以上,如果没有就启动安装,有就跳过

谢谢
发表于 2010-9-6 10:35:09 | 显示全部楼层
检查.net framework是否安装及安装了的版本。
#Include <Array.au3>
#Include <WinAPIEx.au3>
 
 
Global $hKey, $Count, $Num = 1
$hKey = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework')
If @error Then
        MsgBox(0,0,"未安装.NETFramework")
        Exit
Else
$Count = _WinAPI_RegQueryInfoKey($hKey)

Dim $reg_array[1]
For $i = 0 To $Count[0]
        If StringRegExp( _WinAPI_RegEnumKey($hKey, $i),'v\d\.\d.*',0) Then      
                $Num+=1
                ReDim $reg_array[$Num]
                $reg_array[$Num-1]=_WinAPI_RegEnumKey($hKey, $i)
                $reg_array[0]=UBound($reg_array)-1
        EndIf
Next
_WinAPI_RegCloseKey($hKey)
_ArrayDisplay($reg_array)
EndIf

评分

参与人数 1金钱 +30 收起 理由
水木子 + 30 学习啦!

查看全部评分

发表于 2010-9-6 10:37:40 | 显示全部楼层
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

查这个下面的键,windows的程序管理器就是读这里的信息,net framework  和其他运行库、组件、补丁都可以在这里找到的。
发表于 2010-9-6 10:38:10 | 显示全部楼层
不知道直接走注册表可行不!
发表于 2010-9-6 11:11:45 | 显示全部楼层
#include <Array.au3>
#include <WinAPIEx.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
        Local $iI, $iTimer, $hListView

        ; 创建界面
        GUICreate("ListView Add Array", 500, 300)
        $hListView = GUICtrlCreateListView("", 2, 2, 460, 268)
        _GUICtrlListView_SetUnicodeFormat($hListView, False)
        GUISetState()

        ; 添加列
        _GUICtrlListView_AddColumn($hListView, "键名", 100)
        _GUICtrlListView_AddColumn($hListView, "软件名", 100)
        _GUICtrlListView_AddColumn($hListView, "安装路径", 100)
        _GUICtrlListView_AddColumn($hListView, "卸载文件名", 100)

        Global $hKey, $Count, $Num = 1
        $hKey = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall')
        If @error Then
                MsgBox(0, 0, "未安装.NETFramework")
                Exit
        Else
                $Count = _WinAPI_RegQueryInfoKey($hKey)
                _GUICtrlListView_SetItemCount($hListView, $Count[0])
                Dim $reg_array[$Count[0]][4]
                For $i = 0 To UBound($reg_array) - 1
                        $reg_array[$i][0] = _WinAPI_RegEnumKey($hKey, $i)
                        $reg_array[$i][1] = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $reg_array[$i][0], "DisplayName")
                        $reg_array[$i][2] = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $reg_array[$i][0], "InstallDir")
                        $reg_array[$i][3] = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $reg_array[$i][0], "UninstallString")
                Next
                _WinAPI_RegCloseKey($hKey)
                ;_ArrayDisplay($reg_array)
        EndIf

        _GUICtrlListView_AddArray($hListView, $reg_array)


        ; 循环至用户退出
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
EndFunc   ;==>_Main

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-9-6 11:18:03 | 显示全部楼层
感谢楼主分享

评分

参与人数 1金钱 -10 收起 理由
afan -10

查看全部评分

 楼主| 发表于 2010-9-9 15:13:06 | 显示全部楼层
谢谢楼主,太感谢了

评分

参与人数 1金钱 -10 收起 理由
afan -10

查看全部评分

发表于 2010-9-13 10:30:00 | 显示全部楼层
回复 5# 3mile

没有测试成功:
ERROR: $PROCESS_VM_READ previously declared as a 'Const'
Global Const $PROCESS_VM_READ                        = 0x00000010
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                        ~~~~~~~~~~~~^
D:\autoit3\Include\ProcessConstants.au3(22,53) : ERROR: $PROCESS_QUERY_INFORMATION previously declared as a 'Const'
Global Const $PROCESS_QUERY_INFORMATION = 0x00000400
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
D:\zgk_2010\autoit\excises\temp.au3 - 2 error(s), 0 warning(s)
,那个$PROCESS_VM_READ 在哪呢?
发表于 2010-9-13 11:34:51 | 显示全部楼层
没有测试成功:
ERROR: $PROCESS_VM_READ previously declared as a 'Const'
Global Const $PROCESS_VM_READ                        = 0x00000010
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                        ~~~~~~~~~~~~^
D:\autoit3\Include\ProcessConstants.au3(22,53) : ERROR: $PROCESS_QUERY_INFORMATION previously declared as a 'Const'
Global Const $PROCESS_QUERY_INFORMATION = 0x00000400
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
D:\zgk_2010\autoit\excises\temp.au3 - 2 error(s), 0 warning(s)
,那个$PROCESS_VM_READ 在哪呢?
newuser 发表于 2010-9-13 10:30

应该是这里吧?D:\autoit3\Include\ProcessConstants.au3(22,53)
发表于 2010-9-13 13:49:18 | 显示全部楼层
俺是菜鸟  学习了  收藏
发表于 2010-9-13 15:05:55 | 显示全部楼层
回复 9# 3mile
是那里,但错在哪呢?它不是库函数吗?如果没有,应该想缺#include <WinAPIEx.au3>的错误提示啊!
发表于 2010-9-13 15:45:40 | 显示全部楼层
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
删除该项就是卸载吗
发表于 2010-9-13 22:11:30 | 显示全部楼层
回复 11# newuser
我只是猜想,应该是包含文件中的定义常量有冲突吧。
发表于 2010-9-14 16:19:15 | 显示全部楼层
回复 13# 3mile
它不是库文件吗?我已经#include他了!
该如何修正它呢?修改库文件,老实说,想都没想过!
发表于 2010-9-14 21:31:43 | 显示全部楼层
回复 5# 3mile

代码 16 行应用参数 True ,否则中文烂码。。。。。。。

不知为何检测不到安装路径。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 02:29 , Processed in 0.081022 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表