標籤:windows 版本控制
把 Win 8.1 升級成 Windows 2012 R2 (續)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\
PackageDetect
PackageIndex
Packages
Microsoft-Windows-Foundation-Package
Microsoft-Windows-ServerCore-Package
1、在包檢測中分別有這兩項:
Microsoft-Windows-ServerCore-Package
Microsoft-Windows-Foundation-Package
在各自中有相關的包名稱。
說明:第一個是通過 Get-WindowsFeature 檢索;後一個是通過 Get-WindowsOptionalFeature 檢索。
在伺服器上主要是第一個,在工作站上主要是第二個,且在工作站上不會有第一個。
這也是對的,因為不需要了。
2、在包索引中:
只有一條記錄:
對伺服器,是 Microsoft-Windows-ServerCore-Package;
對工作站,是 Microsoft-Windows-Foundation-Package。
就是一個索引,沒什麼過多的內容。
3、在包索引的系統中:
同樣,只有一條記錄:
對伺服器,是 Microsoft-Windows-ServerCore-Package;
對工作站,是 Microsoft-Windows-Foundation-Package。
4、在包索引的產品中:
有各自的版本名稱。
5、在包中有一個 Microsoft-Windows-Common-Foundation-Package:
其屬主是:Microsoft-Windows-ServerCore-Package
6、在包中很顯然要有:Microsoft-Windows-ServerCore-Package
其屬主是:Microsoft-Windows-ServerDatacenterEdition
這就是產品的值啊。
7、現在還有一個問題,到底是在什麼地方確認是伺服器,還是工作站呢,即,包中的 Microsoft-Windows-Foundation-Package 的值是:
Microsoft-Windows-ServerDatacenterEdition、還是
Microsoft-Windows-ProfessionalEdition。
是就在這裡確定嗎?
然後,向上回溯。
處理:
對於 1:
因為在伺服器、工作站上都需要,直接匯入即可。
reg import "C:\CVT\register\Package-Server\p01-Microsoft-Windows-Foundation-Package.reg"reg import "C:\CVT\register\Package-Server\P01-Microsoft-Windows-ServerCore-Package.reg"
本來前面一個可以不匯入的,但是,在伺服器上的包可能還是要多於工作站的,因此,也就一併匯入了。
匯入也不容易啊。
對包檢測沒有編輯的許可權,即使是 SYSTEM 帳號也是如此。而且,還有一個問題,在登錄編輯程式中要可以編輯許可權,但是,通過 Set-Acl,卻無法編輯。
用 . “C:\SysinternalsSuite\psexec.exe” –% -i -s -d regedit 啟動登錄編輯程式。
給 SYSTEM 以編輯的許可權,也就是完全控制了。
不僅要對包檢測的根制授權,也要對 兩個子鍵授權:Microsoft-Windows-Foundation-Package、Microsoft-Windows-ServerCore-Package。
用 . “C:\SysinternalsSuite\psexec.exe” –% -i -s -d powershell_ise 啟動 PowerShell,再執行上面的命令就可以了。
對於 2:
是在包索引中操作。
應該先刪掉 Microsoft-Windows-ServerCore-Package,然後,再匯入 Microsoft-Windows-Foundation-Package。
同樣,是要相關的授權:
對包索引的根和 Microsoft-Windows-Foundation-Package 子鍵。
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackageIndex\Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~0.0.0.0" /freg import "C:\CVT\register\Package-Server\P02-Microsoft-Windows-ServerCore-Package.reg"
對於 3:
同 2 處理。
要對包索引的根和 System 子鍵授權。
好像許可權已經繼承了,因此,不授權也可以了。不過確認一下不壞。
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackageIndex\System" /f reg import "C:\CVT\register\Package-Server\p03-System.reg"
對於 4:
同 3 處理。
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackageIndex\Product" /f reg import "C:\CVT\register\Package-Server\p04-Product.reg"
對於 5:
處理同上。
要對包的根和 Microsoft-Windows-Common-Foundation 授權。
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Microsoft-Windows-Common-Foundation-Package~31bf3856ad364e35~amd64~~6.3.9600.16384" /f reg import "C:\CVT\register\Package-Server\p05-Microsoft-Windows-Common-Foundation-Package.reg"
對於 6:
處理同上。
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~6.3.9600.16384" /f reg import "C:\CVT\register\Package-Server\p06-Microsoft-Windows-ServerCore-Package.reg"
最後,別忘了把包索引和包的 SYSTEM 許可權改成唯讀。
重啟系統,驗證正確性。
dism /online /get-features
系統找不到指定的檔案。
可以在 C:\Windows\Logs\DISM\dism.log 上找到 DISM 記錄檔
那就找吧。
實際是在 C:\Windows\Logs\DISM\CBS.log 中找到的。
C:\Windows\Servicing\Packages\Microsoft-Windows-ServerCore-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum
但這不是一個檔案,而是一組包。因為我們光是把註冊 表中作了修改,但實際上,檔案並不齊。
再測試一下檔案安裝伺服器:
"Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~~6.3.9600.16384" ·| % { "E:\temp\$_.mum" } `| % { dism /online /add-package /packagepath:"$_" }
可以了。
但是,時間太長了,好像是在運行修複工作了。
現在,可以進行修複,就可以了。
先把 install.wm 檔案釋放出來。
dism /mount-image /imageFile:D:\Sources\install.wim /index:4 /mountDir:e:\mount /readonly /optimizedism /online /cleanup-image /restoreHealth /Source:E:\mount\Windows /LimitAccess
把 Win 8.1 升級成 Windows 2012 R2 (續)