中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
關(guān)于Windows下面的如何自動(dòng)安裝驅(qū)動(dòng)
問(wèn)題:
Hi,
小弟目前做的項(xiàng)目需要在Windows下安裝一個(gè)簡(jiǎn)單的USB驅(qū)動(dòng),驅(qū)動(dòng)程序由第三方提供(沒(méi)有經(jīng)過(guò)MS認(rèn)證),包含DLL、INF、SYS等等文件。
一般情況下,當(dāng)即插即用設(shè)備連上PC后,如果PC中沒(méi)有該設(shè)備的驅(qū)動(dòng),會(huì)彈出安裝驅(qū)動(dòng)的提示,用戶根據(jù)提示來(lái)一步步安裝就可以了。
現(xiàn)在這個(gè)項(xiàng)目需要事先就把驅(qū)動(dòng)安裝到PC中去,也就是把安裝驅(qū)動(dòng)這件事放在安裝軟件(項(xiàng)目最終的發(fā)布軟件)的過(guò)程中完成。那么應(yīng)該怎么去安裝驅(qū)動(dòng)呢?
并且由于軟件最終會(huì)運(yùn)行在XP、VISTA和Windows7下面,那么這三個(gè)系統(tǒng)下的自動(dòng)安裝的過(guò)程有多大的區(qū)別呢?


PS:請(qǐng)教過(guò)一個(gè)高手,寫(xiě)個(gè)精簡(jiǎn)DOS程序即可,但還是沒(méi)有弄清楚。正在看《Windows驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解》,由于不是寫(xiě)驅(qū)動(dòng),只是安裝驅(qū)動(dòng),這本書(shū)中也沒(méi)有找到可行的辦法。

-----------------------------------------------------------------------
答案1[推薦答案]
安裝驅(qū)動(dòng),直接寫(xiě)批處理test.bat,直接安裝test.inf
rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 test.inf

對(duì)于不同的系統(tǒng),在批處理里用ver判斷即可

-----------------------------------------------------------------------
答案2:
樓上能更詳細(xì)一些么?
直接安裝test.inf是否就是通過(guò)下面的rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 test.inf 這一行命令實(shí)現(xiàn)的?

另外能給系統(tǒng)標(biāo)識(shí)給小弟么,即ver判斷的值是?

謝謝啦!

-----------------------------------------------------------------------
答案3:
加載驅(qū)動(dòng)可以采用1樓的方法,也可以自己寫(xiě)一個(gè)加載驅(qū)動(dòng)的程序(網(wǎng)上類似代碼很多),在程序中判斷操作系統(tǒng)的版本即可。加載程序打包進(jìn)安裝包里,在安裝的時(shí)候運(yùn)行就大功告成了。

-----------------------------------------------------------------------
答案4[推薦答案]
前天安裝 Windows 7,發(fā)現(xiàn)它里面自帶了 自動(dòng)安裝驅(qū)動(dòng)的功能。
建議樓主參考一下。

-----------------------------------------------------------------------
答案5:
比如:setup.exe中調(diào)用test.bat,有各個(gè)版本驅(qū)動(dòng)
BatchFile code
@echo offecho 判斷系統(tǒng)版本ver|find "5.0">nul&&goto :win2kver|find "5.1">nul&&goto :winxpver|find "5.2">nul&&goto :win2k3ver|find "6.1">nul&&goto :win7goto :end:win2kset inf=win2k\test.infgoto :install:winxpset inf=winxp\test.infgoto :install:win2k3set inf=win2k3\test.infgoto :install:win7set inf=win7\test.infgoto :install:installecho 安裝驅(qū)動(dòng)rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 %inf%echo 安裝完成goto :endpause>nul:end

-----------------------------------------------------------------------
答案6:
回chenhao1988: 小弟我在網(wǎng)上搜了一天,沒(méi)有搜到合適的,由于我之前沒(méi)有碰過(guò)Windows驅(qū)動(dòng)這一塊,所以盲目啊,簡(jiǎn)直不知道該搜什么關(guān)鍵字好了。能提供個(gè)好的鏈接么?
另外,關(guān)于操作系統(tǒng)的版本的獲取是調(diào)用什么庫(kù)函數(shù)?還是通過(guò)別的途徑獲?。?br>不勝感激啊。


回DiaoNianYu: 我裝了Windows7,沒(méi)找到“自動(dòng)安裝驅(qū)動(dòng)”的功能。。。


另外請(qǐng)教一下: 在Windows7和在xp以及VISTA下面安裝驅(qū)動(dòng)有什么不同?
也就是說(shuō)1樓提供的方法,在vista和WIN7下能安裝么?(話說(shuō)這個(gè)應(yīng)該是我有了代碼后優(yōu)先測(cè)試的)


-----------------------------------------------------------------------
答案7[推薦答案]
win7和xp、vista下安裝驅(qū)動(dòng)一樣的呀,要么是提供的setup.exe程序,要么是自動(dòng)搜索光盤(pán)里的.inf,要么手工搜索指定的.inf

vista和win7的驅(qū)動(dòng)一般都是公用的,要不為什么說(shuō)win7是在vista版本上的改進(jìn)呢

-----------------------------------------------------------------------
答案8:
回just4:
謝謝提供源碼??!
驅(qū)動(dòng)只有一個(gè)版本(XP/VISTA/WINDOWS7下都是這一個(gè)驅(qū)動(dòng),不過(guò)有32位和64位之分。。)。
一、請(qǐng)教一下這一行“rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 %inf%
”,因?yàn)槲覜](méi)寫(xiě)過(guò)批處理程序(=.=!夠菜的),所以不免很多問(wèn)題啊(高抬貴手,請(qǐng)不要“不解釋”啊~~)。這一行中按照說(shuō)明應(yīng)當(dāng)就是安裝驅(qū)動(dòng)的,呃,InstallHinfSection的職責(zé)是什么呢?我都是一個(gè)一個(gè)關(guān)鍵字去搜索的。
二、還有就是這里面怎么設(shè)置inf文件的路徑呢?
三、是否只要安裝INF文件就可以了,那么直接右擊INF文件選擇“安裝”是表示什么意思呢?(這樣子我試過(guò),不能安裝)

-----------------------------------------------------------------------
答案9:
我剛找了一篇講批處理的文章,正在看,發(fā)現(xiàn)跟不上回帖的高手的步伐了。。。
抓緊時(shí)間?。?!

-----------------------------------------------------------------------
答案10:
請(qǐng)教just4:

我剛剛試了一下。
批處理代碼如下:
@echo off
echo 判斷系統(tǒng)版本
set inf=D:\XP\DRIVER\CH341WDM.INF
echo 安裝驅(qū)動(dòng)
rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 %inf%
echo 安裝完成

發(fā)現(xiàn)沒(méi)有安裝上去,請(qǐng)問(wèn)是怎么一回事呢? 問(wèn)題出在哪里了呢?




-----------------------------------------------------------------------
答案11:
C++加載驅(qū)動(dòng)代碼,具體你再研究一下,我從程序里粘出來(lái)的。
//加載驅(qū)動(dòng)文件
//DriverName為驅(qū)動(dòng)文件名
//DeviceName為設(shè)備名
//
//----------------------------------------------------------------------
bool LoadDriver(char* DriverName,char* DeviceName)
{
SC_HANDLE hServiceMgr=NULL;
SC_HANDLE hServiceCre=NULL;
SC_HANDLE hServiceOpen=NULL;
HANDLE hDevice=NULL;
char Device[64]={0};
char Driver[32]={0};
int i=0;
hServiceMgr=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(hServiceMgr==NULL)
{
return false;
}
lstrcpy(Device,DeviceName);

lstrcpy(Driver,DriverName);
lstrcat(Driver,".sys");
TCHAR dirpath[MAX_PATH]={0};


GetFullPathName(Driver, MAX_PATH, dirpath, NULL);
//創(chuàng)建服務(wù)
if((hServiceCre=CreateService( hServiceMgr, 
DriverName, //SYSTEM\CurrentControlSet\Services 驅(qū)動(dòng)程序的在注冊(cè)表中的名字 
DriverName, // 注冊(cè)表驅(qū)動(dòng)程序的 DisplayName 值 
SERVICE_ALL_ACCESS, // 加載驅(qū)動(dòng)程序的訪問(wèn)權(quán)限 
SERVICE_KERNEL_DRIVER,// 表示加載的服務(wù)是驅(qū)動(dòng)程序 
SERVICE_DEMAND_START, // 注冊(cè)表驅(qū)動(dòng)程序的 Start 值 
SERVICE_ERROR_IGNORE, // 注冊(cè)表驅(qū)動(dòng)程序的 ErrorControl 值 
dirpath, // 注冊(cè)表驅(qū)動(dòng)程序的 ImagePath 值 
NULL,
NULL,
NULL, 
NULL, 
NULL))!=NULL)
{
CloseServiceHandle(hServiceCre);
hServiceOpen=OpenService(hServiceMgr, DriverName, SERVICE_ALL_ACCESS);
StartService(hServiceOpen,0,NULL);
CloseServiceHandle(hServiceOpen);
hServiceOpen=NULL;
hServiceCre=NULL;
}
else

DWORD dwRtn=0;
dwRtn = GetLastError(); 
if( dwRtn == ERROR_SERVICE_EXISTS || dwRtn==ERROR_SERVICE_MARKED_FOR_DELETE) 
{
if ((hServiceOpen = OpenService(hServiceMgr, DriverName, SERVICE_ALL_ACCESS)) != NULL)
{
StartService(hServiceOpen,0,NULL);
CloseServiceHandle(hServiceOpen);
hServiceOpen=NULL;
}

}
if ((hDevice = CreateFile(Device, GENERIC_READ|GENERIC_WRITE, \
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE)
{
CloseHandle(hDevice);
}
else
{
hServiceOpen = OpenService(hServiceMgr, DriverName, SERVICE_ALL_ACCESS);
DWORD dw=0;
dw=DeleteService(hServiceOpen);
CloseServiceHandle(hServiceMgr);
return false;
}
CloseServiceHandle(hServiceMgr);
return true;
}
//----------------------------------------------------------------------
//
//卸載驅(qū)動(dòng)文件
//DriverName為驅(qū)動(dòng)文件名
//
//----------------------------------------------------------------------
bool UnLoadDriver(char* DriverName)
{
SC_HANDLE hServiceMgr=NULL;
SC_HANDLE hServiceOpen=NULL;
int i=0;
hServiceMgr=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(hServiceMgr==NULL)
{
return false;
}
if ((hServiceOpen=OpenService(hServiceMgr,DriverName,SERVICE_ALL_ACCESS)) == NULL) 
{
CloseServiceHandle(hServiceMgr);
return false;
}
SERVICE_STATUS serviceStatus;
//關(guān)閉啟動(dòng)的服務(wù)
if (!ControlService(hServiceOpen,
SERVICE_CONTROL_STOP,
&serviceStatus)) // pointer to arguments 
{
DWORD err=0;
err = GetLastError();
if (err == ERROR_SERVICE_NOT_ACTIVE) 
{
DeleteService(hServiceOpen);
CloseServiceHandle(hServiceOpen);
hServiceOpen=NULL;

}
while(serviceStatus.dwCurrentState == SERVICE_STOP_PENDING && i++ <80)
{
QueryServiceStatus(hServiceOpen, &serviceStatus);
Sleep(50);
}
if(serviceStatus.dwCurrentState == SERVICE_STOPPED)
{
DeleteService(hServiceOpen);
CloseServiceHandle(hServiceOpen);
hServiceOpen=NULL;
}
CloseServiceHandle(hServiceMgr);
return true;
}

-----------------------------------------------------------------------
答案12[推薦答案]
關(guān)于獲取操作系統(tǒng)版本,可用Windows API
GetVersionEx  
VerifyVersionInfo用法見(jiàn)MSDN。

-----------------------------------------------------------------------
答案13:
回chenhao1988:
非常感謝你提供源代碼,在《Windows驅(qū)動(dòng)開(kāi)發(fā)技術(shù)詳解》中的第三章附的源碼中看到過(guò)類似的代碼。
這種解決方案是采用NT方式加載驅(qū)動(dòng)的。
要安裝的驅(qū)動(dòng)是要采用WDM方式的。
不過(guò)我對(duì)這兩種方式還不是太熟悉(從沒(méi)做過(guò)驅(qū)動(dòng)=.=!),我不清楚通過(guò)NT方式能否加載。我只知道WDM對(duì)應(yīng)的驅(qū)動(dòng)程序有INF、SYS、VXD等等文件,需要把這些文件COPY到系統(tǒng)文件夾下,并修改注冊(cè)表。而NT方式我從源代碼中看到只有復(fù)制SYS文件,其他的似乎并沒(méi)有復(fù)制。

我昨天晚上參照just4的源碼通過(guò)批處理程序來(lái)做,但是發(fā)現(xiàn)只把SYS復(fù)制過(guò)去了,DLL文件并沒(méi)有復(fù)制過(guò)去。關(guān)于注冊(cè)表有沒(méi)有修改,我還沒(méi)有看。。。

chenhao1988能解答一下么?上面說(shuō)的有點(diǎn)啰嗦啊~~ 就是NT方式能夠加載WDM驅(qū)動(dòng)么?還有就是為什么我參照just4的方法沒(méi)有成功(現(xiàn)象是插上硬件后還是會(huì)彈出提示)?

-----------------------------------------------------------------------
答案14:
內(nèi)部原理 倒沒(méi)有考慮過(guò),學(xué)習(xí)了

-----------------------------------------------------------------------
答案15[推薦答案]
對(duì)了,將inf文件中的驅(qū)動(dòng)加載方式StartType = 0 ;SERVICE_BOOT_START可以嗎?系統(tǒng)啟動(dòng)自動(dòng)加載。
我對(duì)驅(qū)動(dòng)認(rèn)識(shí)也很膚淺。

-----------------------------------------------------------------------
答案16:
回chenhao1988:
將驅(qū)動(dòng)加載方式改為StartType = 0;運(yùn)行批處理程序后,會(huì)提示重啟機(jī)器,這應(yīng)該是正確的提示。
這個(gè)INF文件里面沒(méi)有SERVICE_BOOT_START這個(gè)設(shè)置。

我有一個(gè)疑問(wèn):就是
“rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 %inf% ”這一行中的DefaultInstall 這個(gè)應(yīng)當(dāng)為INF文件中的默認(rèn)安裝節(jié)。

那么這個(gè)的作用應(yīng)當(dāng)是 COPY DLL和SYS文件到系統(tǒng)文件夾當(dāng)中并且修改注冊(cè)表,這兩樣事情我測(cè)試過(guò)了,都是正確的。但是還是會(huì)有提示。那么是不是還需要加載服務(wù)什么的呢?

在INF文件當(dāng)中有個(gè)
[CH341.Install.NT.Services]
AddService = CH341, 2, CH341.Service

[CH341.Service]
DisplayName = "CH341WDM"
ServiceType = 1
StartType = 0
ErrorControl = 1
ServiceBinary = %10%\System32\Drivers\CH341WDM.SYS
這樣子的兩個(gè)段。 而在上面的批處理程序中似乎沒(méi)有涉及到服務(wù)。請(qǐng)問(wèn)是不是需要加載服務(wù)?。?應(yīng)該如何加載呢? 調(diào)用什么庫(kù)函數(shù)呢?


高手指點(diǎn)一下啊



-----------------------------------------------------------------------
答案17:
樓主有解決這個(gè)問(wèn)題嗎?我最近也在做windows下USB驅(qū)動(dòng)的安裝包,實(shí)現(xiàn)自動(dòng)安裝。。。學(xué)習(xí)ing。。。

-----------------------------------------------------------------------
答案18:
樓主這個(gè)問(wèn)題解決了嗎,我也碰到一樣的問(wèn)題,
Filename:"RUNDLL32.exe"; Parameters: "setupapi.dll, InstallHinfSectionDefaultInstall 132 {win}\inf\fpga.inf";WorkingDir:{win}\inf;Flags:runhidden


提示安裝失敗

-----------------------------------------------------------------------
答案19:
我也想知道呢,也不出來(lái)總結(jié)一下心得.真是的.

-----------------------------------------------------------------------
答案20:
我也想知道,也是這句批處理 但好像沒(méi)安裝成功啊 連小白都算不上的小白求教

-----------------------------------------------------------------------
答案21:
我最近也遇到相似的問(wèn)題,后來(lái)發(fā)現(xiàn)如果沒(méi)有通過(guò)微軟徽標(biāo)認(rèn)證的程序在Windows XP用 rundll32.exesetupapi.dll,InstallHinfSection DefaultInstall 128 test.inf這一行命令是不能實(shí)現(xiàn)自動(dòng)安裝的,只有通過(guò)微軟的徽標(biāo)認(rèn)證的驅(qū)動(dòng)才能自動(dòng)安裝。好像是這么回事。我換了有微軟數(shù)字簽名的驅(qū)動(dòng)程序后在XP下能實(shí)現(xiàn)自動(dòng)安裝并達(dá)到預(yù)期的效果。可是在Windows 7下就不能實(shí)現(xiàn)自動(dòng)安裝了,對(duì)了一下文件是沒(méi)有修改注冊(cè)表中的枚舉的部分。不知道這是為什么。各位有沒(méi)有什么好的解決方法?
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
windows7 聲卡驅(qū)動(dòng)無(wú)法安裝的解決方案
提示“未找到調(diào)制解調(diào)器"解決
Windows7系統(tǒng)USB安裝驅(qū)動(dòng)出現(xiàn)“系統(tǒng)找不到指定的文件'解決方案
如何為PE添加SCSI驅(qū)動(dòng)
CAS RESTful API 開(kāi)發(fā)文檔
如何實(shí)現(xiàn)兩臺(tái)電腦連接共享打印機(jī)?
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服