关于如何检测驱动是否已经安装

#include<iostream>

#include<windows.h>

#include<SetupAPI.h>

#include<INITGUID.h>

#pragma comment(lib,"setupapi.lib")

DEFINE_GUID(GUID_DEVINTERFACE_USB_HUB,

            0x0040D94D,0xBE36,0x48B1,0x96,0x05,0x0e,0xfb,0x33,0xd5,0xc2,0x06);
//在注册表\HKEY_LOCAL_MACHINE\SYSTEM下有三项:
//ControlSet001、ControlSet002、CurrentControlSet
//每项下面路径类似..\Enum\USB\VID_04CC&PID_121B    
//(VID_04CC厂商编号,PID_121B设备编号构成设备唯一身份标识)
//每一项都可以找到GUID,但只有最上面一项可以找到一个键:
//\HKEY_LOCAL_MACHINE\SYSTEM\Enum\USB\VID_04CC&PID_121B\1401010000\Device Parameters
//下的DeviceInterfaceGUIDs这个键值才是本设备唯一GUID,其它GUID是设备类通用GUID
//本程序主要就是用这个GUID来判断USB驱动是否安装成功

#define GUID_CLASS_USB_HUB  GUID_DEVINTERFACE_USB_HUB

using namespace std;

int main()

{

    LPGUID lpGuid = (LPGUID)&GUID_CLASS_USB_HUB;

    HDEVINFO info = SetupDiGetClassDevs(lpGuid,NULL,NULL,DIGCF_DEVICEINTERFACE);

    SP_DEVINFO_DATA DeviceInfoData = { sizeof(DeviceInfoData)};

    BOOL IsInstalled = SetupDiEnumDeviceInfo(info,0,&DeviceInfoData);

    SetupDiDestroyDeviceInfoList(info);

    if(IsInstalled)

    {

        return 1;

    }

    else

    {

        return 0;

    }

}

以上代码生成执行文件后,在Inno Setup中执行该程序,取得返回值(return 0/1;),

用该返回值(IsInstalled)来判断驱动一否已经安装成功;

Inno setup:

var

IsInstalled:Interger;

FileNameDriverC:String;

begin

FileNameDriverC := WizardDirValue + '\***.exe';

Exec(FileNameDriverC,'','',SW_HIDE,ewWaitUntilTerminated,IsInstalled);

end;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章