安装usb驱动

//
static UINT Res2File( LPCTSTR lpName, LPCTSTR lpType, LPCTSTR filename ) //把资源保存到文件
{ 
    HRSRC hRes = ::FindResource( NULL, lpName, lpType ); 
    HGLOBAL gl =::LoadResource( NULL, hRes ); 
    LPVOID lp = ::LockResource( gl ); 
    HANDLE fp = ::CreateFile( filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); 
    if( fp == INVALID_HANDLE_VALUE ) 
        return 1; 

    DWORD a; 
    if( !::WriteFile( fp, lp, SizeofResource( NULL, hRes ), &a, NULL ) ) 
        return 1; 

    CloseHandle( fp ); 
    FreeResource( gl ); 
    return 0; 
    //Res2File(MAKEINTRESOURCE(IDR_EXE_MAKEBIN),"MYFILE","C://makeb.exe"); //测试保存资源
}
//
static UINT THREAD_InstallUSBDriver_Function(LPVOID pParam) //安装usb驱动的线程
{        
    const char installdriver_bat[]="//installdriver.bat";
    char syspath[MAX_PATH+1];
    GetSystemDirectory(syspath,MAX_PATH+1);
    CString installbatpath= syspath;
    installbatpath +=installdriver_bat;
    //
    PROCESS_INFORMATION ProcessInfo; 
    STARTUPINFO StartupInfo; //启动参数
    ZeroMemory(&StartupInfo, sizeof(StartupInfo));
    StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
    StartupInfo.wShowWindow = SW_HIDE;    //不显示
    StartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //使以上参数生效
    //
    if(CreateProcess(installbatpath, NULL, 
        NULL,NULL,FALSE,
        0,
        NULL,
        syspath,
        &StartupInfo,
        &ProcessInfo))
    { 
        WaitForSingleObject(ProcessInfo.hProcess,INFINITE); //必须等待,否则就跑到下面删除的语句了。
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ProcessInfo.hProcess);
    }  
    else
    {
        AfxMessageBox("创建安装驱动进程失败,请重试!",MB_OK|MB_ICONERROR);
    }

    //删除释放的文件
    
    CDlg *pDlg = (CDlg*)pParam;
    ::EnableWindow(::GetDlgItem(pDlg->m_hWnd,IDC_BTN_INSTALLDRIVER),TRUE);
    //
    return(0);
}
void _usb_testerDlg::OnBnClickedBtnInstalldriver()//安装驱动
{
    UINT err=0;
    const char usb_inf[]="//_usb.inf";
    const char usb_sys[]="//_usb.sys";
    const char usb_cat[]="//_usb.cat";
    const char installdriver_bat[]="//installdriver.bat";
    //
    char syspath[MAX_PATH+1];
    GetSystemDirectory(syspath,MAX_PATH+1);
    CString strTemp ,strDriverPath = syspath ;    //得到类似c:/windows/system32形式
    //strcat(syspath,"//drivers"); 
    //strcpy(tempstr,syspath);    //syspath,tempstr 类似c:/windows/system32/drivers
    //
    strTemp =strDriverPath + usb_inf;
    err = Res2File(MAKEINTRESOURCE(IDR_USBINF),"USBDRV",    strTemp);
    strTemp = strDriverPath + usb_sys;
    err+= Res2File(MAKEINTRESOURCE(IDR_USBSYS),"USBDRV",    strTemp);
    strTemp = strDriverPath + usb_cat;
    err+= Res2File(MAKEINTRESOURCE(IDR_USBCAT),"USBDRV",    strTemp);
    //
    strTemp = strDriverPath + installdriver_bat;
    err+= Res2File(MAKEINTRESOURCE(IDR_INSTALLDRIVER_BAT),"USBDRV",    strTemp);
    //return;
    if(err)
    {
        AfxMessageBox("释放驱动出错,请重试!",MB_OK|MB_ICONERROR);
        return;
    }
    //安装
    GetDlgItem(IDC_BTN_INSTALLDRIVER)->EnableWindow(FALSE);
    AfxBeginThread(THREAD_InstallUSBDriver_Function,this,THREAD_PRIORITY_ABOVE_NORMAL);
}


 

//比较重要的bat文件:

@echo off
rem 安装load驱动
rundll32.exe setupapi.dll,InstallHinfSection xxx_usb_DDI.NT 132 .//xxx_usb.inf


// 更新,在Vista以上系统中变了:

Windows 7/8:

%SystemRoot%\System32\InfDefaultInstall.exe "%1"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值