-
使用C#開發(fā)完成的應(yīng)用程序,更換計(jì)算機(jī)后運(yùn)行出現(xiàn)異常:未經(jīng)處理的異常:System.BadImageFormatException:試圖加載格式不正確的程序。(HRESULT: 0x8007000B)。
使用.Net開發(fā)、使用了默認(rèn)配置(Any CPU)的應(yīng)用程序,在運(yùn)行時(shí)會(huì)被.Net JIT編譯成與操作系統(tǒng)相同的配置(x86, x64);在64位系統(tǒng)上運(yùn)行時(shí),被編譯成64位;在32位操作系統(tǒng)上運(yùn)行時(shí),被編譯成32位。
出現(xiàn)上面異常的原因:在64位應(yīng)用程序里面調(diào)用了32位的控制卡DLL,或在32位應(yīng)用程序里面調(diào)用了64位的控制卡DLL;
為了避免此類情況發(fā)生,建議用戶將應(yīng)用程序明確配置為X86或X64,同時(shí)配置對(duì)應(yīng)版本的控制卡DLL,避免使用Any CPU配置。
-
在64位Windows 7系統(tǒng)下,無法成功安裝控制卡的驅(qū)動(dòng)程序,安裝過程提示“Windows無法驗(yàn)證此驅(qū)動(dòng)程序軟件的發(fā)布者”。
64位Windows系統(tǒng)下的驅(qū)動(dòng)程序必須使用經(jīng)過微軟交叉授權(quán)的數(shù)字證書簽名后,才可以正常安裝。
為了提高操作系統(tǒng)的安全性,微軟自從2016 年1 月1日后不再提供基于SHA-1 哈希算法的代碼簽名數(shù)字證書,轉(zhuǎn)而使用SHA-2 哈希算法。
Windows 7操作系統(tǒng)于2010年發(fā)布,發(fā)布時(shí)僅支持SHA-1 哈希算法簽名和驗(yàn)證支持,為了支持該安全升級(jí),微軟于2015年3月提供一個(gè)針對(duì) Windows 7 和 Windows Server 2008 R2更新,以便添加 SHA-2 簽名和驗(yàn)證功能支持,因此用戶僅需要打開操作系統(tǒng)的自動(dòng)更新、將計(jì)算機(jī)連接網(wǎng)絡(luò)以下載更新即可。
如果安裝控制卡的計(jì)算機(jī)無法上網(wǎng),用戶可在有互聯(lián)網(wǎng)連接的計(jì)算機(jī)上從微軟網(wǎng)站下載“用于基于 x64 的系統(tǒng)的 Windows 7 安全更新程序 (KB3033929)”,然后復(fù)制到目標(biāo)計(jì)算機(jī)上安裝。下載鏈接:https://www.microsoft.com/zh-cn/download/details.aspx?id=46148
參考信息:
https://support.microsoft.com/en-us/help/3033929/microsoft-security-advisory-availability-of-sha-2-code-signing-support
-
安裝了PCI, PCI Express接口運(yùn)動(dòng)控制卡的計(jì)算機(jī)從睡眠中被喚醒后,應(yīng)用程序出現(xiàn)異常,控制軸無法運(yùn)動(dòng)。
使用FPGA實(shí)現(xiàn)的PCI橋或PCI Express橋,不支持PCI電源管理規(guī)范里面定義的低功耗狀態(tài)(PCI Function D1 State,? PCI Function D2 State, PCI Function D3 code State),計(jì)算機(jī)從休眠中被喚醒后,F(xiàn)PGA內(nèi)部寄存器全部被復(fù)位,休眠前的寄存器值丟失。解決辦法:安裝了PCI, PCI Express接口控制卡的計(jì)算機(jī),要在其電源管理設(shè)置里面禁止計(jì)算機(jī)進(jìn)入睡眠狀態(tài)。
-
在Windows 11操作系統(tǒng)下安裝控制卡驅(qū)動(dòng)程序,設(shè)備管理器提示“Windows 無法驗(yàn)證此設(shè)備所需的驅(qū)動(dòng)程序的數(shù)字簽名。某軟件或硬件最近有所更改,可能安裝了簽名錯(cuò)誤或損毀的文件,或者安裝的文件可能是來路不明的惡意軟件。 (代碼 52)”。
從Windows 10 1607版本開始,微軟改變了內(nèi)核驅(qū)動(dòng)程序的簽名方式,操作系統(tǒng)不再加載沒有使用Dev Portal方式簽名的內(nèi)核驅(qū)動(dòng)程序(即使該驅(qū)動(dòng)程序已經(jīng)包含經(jīng)過微軟簽發(fā)的交叉簽名證書進(jìn)行的簽名)。
但是存在三個(gè)例外情況:
? 計(jì)算機(jī)上的操作系統(tǒng)是從Windows 10 1607版本之前的版本升級(jí)上來;
? 計(jì)算機(jī)BIOS里面的安全啟動(dòng)選項(xiàng)(Secure Boot)被關(guān)閉;
? 驅(qū)動(dòng)程序使用2015年7月29日之前微軟簽發(fā)的交叉簽名證書進(jìn)行簽名。
因此可通過關(guān)閉計(jì)算機(jī)BIOS里面的安全啟動(dòng)選項(xiàng)(Secure Boot)的方法解決此問題。