如何檢測驅動是否已經安裝

#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;

 

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