標籤

2017年2月23日 星期四

[轉] 在 Windows 8 裡面安裝 .NET Framework,許多舊軟體才能跑

轉自: http://www.techbang.com/posts/12495-install-the-net-framework-bu-qiu-ren

已經升級 Windows 8 的人說來也不少,新手上路除了得習慣 Modern UI,難免還會碰上些問題。就像使用半新不舊的軟體,可能跳出要求安裝 .NET Framework 的畫面,其實 Windows 8 已經內建,只是需要動手執行安裝而已。

懶人用上網下載安裝法

前些時間傳出「Yahoo!奇摩輸入法」將停止維護,連同下載服務也會一併關閉,不少人搶著下載備份。想將它安裝在Windows 8問題就來了,像它這樣需要.NET Framework 3.5的軟體不算少,是該去哪兒變出來呢?其實系統內建支援4.5、3.5、3.0、2.5等版本,但是預設只會安裝4.5版,幸好Microsoft設計還算大心,出現提醒畫面時選擇「安裝此功能」,也能自動上網下載安裝。
建議Windows 8灌好後,先將硬體裝置驅動程式裝妥,然後立馬進行.NET Framework 3.5安裝設定,就不會被應用軟體煩到。進入「控制台」點選「程式與功能」,再選擇「開啟或關閉Windows功能」,將眼前「.NET Framework 3.5(包括.NET 2.0和3.0)」打勾勾並按下「確定」,就能自動從網路下載並且完成安裝。
▲過去Windows 7也經常出現這類訊息,上網下載是最簡單的解決方式。
▲Windows 8內建支援舊版本,控制台內的新增方式,也是從網路下載。

遇到問題就手動作業吧

無奈有時願與事違,搞老了老半天仍然無法下載安裝,說來真是令人氣結。或者沒有網際網路資源、3G上網有封包限制的壓力,以及其他疑難雜症時,倒不如手動作業來得乾脆。
進階操作方式不用連接網際網路,只需要準備好Windows 8安裝光碟,以管理員身分開啟「命令提示字元」輸入下列操作指令,就會自動從光碟抓出檔案來進行安裝。指令中x:是放置Windows 8光碟的磁碟機代號,實體DVD、虛擬光碟機、USB等都可以,自行依電腦環境組態修改代號即可。
Dism /online /enable-feature /featurename:NetFx3 /All /Source:❌:\sources\sxs /LimitAccess

▲在命令提示字元輸入操作指令,只需要準備安裝光碟而不用連上網路。
有些人安裝時會遇到「0x800F0906」錯誤碼,可以試著在「執行」輸入「gpedit.msc」,進入「本機群組原則編輯器」。依序點開「電腦設定、系統管理範本、系統」,找到「指定選用之元件安裝和元件修復的相關設定」,將「已啟用」和「直接連絡Windows Update下載修復內容,而不是從Windows Server Update Services(WSUS)」點選、打勾,最後按下「確定」儲存。之後到「命令提示字元」輸入「gpupdate /force」指令,讓剛設定好的修改值套用,應該就能解決了。
▲修改本機群組原則編輯器設定值,可以解決部分無法順利安裝的問題。

2017年2月15日 星期三

我對中斷的理解(以IRQ為主) - 1

太多轉貼的網誌有點無聊,今天來寫寫自己對於中斷的理解。


1. 軟體中斷與硬體中斷。

OS必須要知道硬體中斷的發生,像是我們敲敲鍵盤動動滑鼠的動作,OS都必須要去讀取keystroke,我們必須做更多事來處理硬體中斷,來確保CPU能夠順利再回到原來的狀態,這篇文章會提到比較多的IRQ便是屬於硬體中斷。

而軟體中斷,常見的TRAP或EXCEPTION,我都是用除以零去理解,當CPU都收到這種要求,產生算術邏輯錯誤,便會產生一個軟體中斷去中止PROGRAM。

2. IRQ的產生
Device要跟CPU要資源做事有兩種方式,一種是CPU來POLLING,但這種方式太浪費CPU資源,所以便有了IRQ( interrupt request),當Device需要CPU幫忙,便透過中斷跟CPU要資源。

3. 誰會發IRQ
這邊要講的是PCI device,一個PCI device會有四隻腳讓他發IRQ,INTA# INTB# INTC# INTD#,如果你是single function PCI device,就是透過INTA#,這部分是Boad designer去設計,BIOS只能read。

4. 8259 PIC - Programmable Interrupt Controller
早期需要中斷的DEVICE就是KEYBOARD、MOUSE、CMOS等等,後來越來越多device需要發中斷,而處理這些事情,便是靠傳說中的8259,8259長這樣:
「8259」的圖片搜尋結果
我們可以看到它是兩個接在一起的,就是說明IRQ不夠用的最佳例子(一個不夠我就接兩個),其中大部分的IRQ都被占用了,這部分可以參考WIKI: https://en.wikipedia.org/wiki/Interrupt_request_(PC_architecture)
可鍵盤滑鼠計時器等等都有占用到固定的IRQ了,一般而言沒有用的還有IRQ10, IRQ11就是我們可以用來分配的。對於8259而言,IRQ number小的優先權較大,由於IRQ2是用來串接的,所以優先權依序為0~1, 8~15, 3~7。

3.1 8259暫存器
暫略

3.2 Shared IRQ
8根不夠用,難道15根就夠用嗎,如果還是不夠怎麼辦。所以IRQ有共享的觀念,那要怎麼共享呢?很簡單,我們在IRQ前面加個P,他就Programmable了。

3.3. PIRQ
當然不是加個P就好了,share IRQ的同時,我們需要做什麼呢? INTEL當初的設計是找廠商在設計幾根PIN,線路圖長這樣。

這張圖是網路找的,應該是當初有根INTEL合作的廠商吧,我們可以看到這個CHIP有四根腳,分別是PIRQA#, PIRQB#, PIRQC#, PIRQD#。BIOS在POST的時候,會把可以用的IRQ收集起來,根據SYSYEM的狀況,把這些可用的PIN填入PIRQA# PIRQB# PIRQC# PIRQD#對應的register,這張圖為例,當我的PCI Slot 1透過INT A#發出了中斷,他接到了PIRQA#,透過register 60H,router知道要用IRQ9,最終便透過IRQ9發出,若透過INT C#發出中斷,對應到62H,一樣是IRQ9,自此IRQ透過register就Programmable,共享的概念就達成了。

到最後PIRQ也不夠用了,所以又多了PIRQE#...PIRQH#,是不是蠻無言的,這也為日後APIC的出現留下伏筆,下篇再談。

難道這樣就完成了嗎,不我們還差一點點,到這邊為止device只是發出IRQ,但是OS只知道有人發了IRQ,並不知道是誰發的,所以有了IRQ routing table。

4.1 IRQ routing table
早期這個table存在於memory,現在就是用ACPI去規範他。我節錄ACPI的sample code如下

Method(_PRT,0) {
Package(){0x0000FFFF, 0, LNKA, 0 },
Package(){0x0000FFFF, 1, LNKB, 0 },
Package(){0x0000FFFF, 2, LNKC, 0 },
Package(){0x0000FFFF, 3, LNKD, 0 },
}
這邊第一個參數就交代了device的訊息(D0, any fucntion)。
APIC在這邊的描述又有些不同,以後再提。

5.後述
可以看出即便在IRQ不夠的狀態下,錢還是要賺,硬體還是要出,所以出現了許多過渡產品,之後為了要相容這些,也衍生出不少問題。
無論如何,這都是我粗淺的理解,之後會繼續往下衍生,有錯還請先進指正。