把 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" /f
reg 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 /optimize
dism /online /cleanup-image /restoreHealth /Source:E:\mount\Windows /LimitAccess