前言:
1.内容主要来源于网络、论坛学习,集合了很多大佬的经验和方法,不再一一列明具体人员,对原创作者和各位大佬表示感谢。
2.帖子的目的:分享一下最近一年多的走过的弯路和精简路上百求不得解的苦楚,就是那一层膜,戳破需要经历太多。(脑袋里另外一个小人说:靠,就是想混点PB,别煽情)。
3.部分内容为失败摸索所得,因个人技术和理解问题,未必对,请大家喷的时候,轻一点,慢一点,仅做抛砖引玉,因为我也是菜鸟,所以私信啥的没有回复,也请见谅。
4.请硬盘大的网友们见谅,我不讨论是否该精简,仅仅从好奇的角度做一下探讨组件问题。
第一部分:工具 使用:Package_Remover,以前论坛不少大佬、大神都发过,我就不发了
第二部分:组件识别 1.Windows\servicing\Packages 看一下mum文件
组件包和语言包的区别
以Microsoft-OneCore-Http-Package为例: Microsoft-OneCore-Http-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum Microsoft-OneCore-Http-Package~31bf3856ad364e35~amd64~zh-CN~10.0.19041.1.mum 总的来说带~zh-CN~都是语言组件
主封包和子封包的区别 情况一:
以Microsoft-Windows-Telnet-Client-Package为例:
Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~zh-CN~10.0.19041.1.mum Microsoft-Windows-Telnet-Client-Opt-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum Microsoft-Windows-Telnet-Client-Opt-Package~31bf3856ad364e35~amd64~zh-CN~10.0.19041.1.mum 用记事本打开Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum - <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- <assembly xmlns="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0" copyright="Copyright (c) Microsoft Corporation. All Rights Reserved.">
- <assemblyIdentity name="Microsoft-Windows-Telnet-Client-Package" version="10.0.19041.1" processorArchitecture="amd64" language="neutral" buildType="release" publicKeyToken="31bf3856ad364e35" />
- <package identifier="Microsoft-Windows-Telnet-Client" releaseType="Feature Pack">
- <parent integrate="delegate">
- <assemblyIdentity name="Microsoft-Windows-ServerCore-Package" version="10.0.19041.1" processorArchitecture="amd64" language="neutral" buildType="release" publicKeyToken="31bf3856ad364e35" />
- </parent>
- <parent integrate="delegate">
- <assemblyIdentity name="Microsoft-Windows-Foundation-Package" version="10.0.19041.1" processorArchitecture="amd64" language="neutral" buildType="release" publicKeyToken="31bf3856ad364e35" />
- </parent>
- <update name="TelnetClient" displayName="Telnet Client" description="Allows you to connect to other computers remotely.">
- <mum2:customInformation xmlns:mum2="urn:schemas-microsoft-com:asm.v3">
- <ServerComponent Description="Telnet Client uses the Telnet protocol to connect to a remote Telnet server and run applications on that server." DisplayName="Telnet Client" Id="44" Type="Feature" UniqueName="Telnet-Client">
- <Version Major="10" Minor="0" />
- <Deploys>
- <Update Name="TelnetClient" />
- </Deploys>
- </ServerComponent>
- </mum2:customInformation>
- <selectable disposition="staged">
- <detectNone default="false" />
- </selectable>
- <package contained="false" integrate="hidden">
- <assemblyIdentity name="Microsoft-Windows-Telnet-Client-Opt-Package" version="10.0.19041.1" processorArchitecture="amd64" language="neutral" buildType="release" publicKeyToken="31bf3856ad364e35" />
- </package>
- </update>
- </package>
- </assembly>
复制代码 会发现Microsoft-Windows-Telnet-Client-Opt-Package包含在里面,所以,可以简单理解为Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum是主封包,主封包移除,子封包会跟着移除,子封包移除,主封包不会被移除。PS:通过查看mum文件,是获得各个组件之间关联情况的重要途径!!!
情况二:
这种特别多的组件怎么办,比如下面的这个情况:
请勿使用多线程下载工具下载论坛附件!
一般采取下面三个原则: 1.先找文件名最短的 2.先找组件名带Client-Package的 3.先找组件名带Microsoft-OneCore的(如果不是以OneCore大头,而是OneCore在文件名的最后,那么可以不用看基本上都是子封包) 4.一个个查看mum文件,查看组件管理关系(下下策)
情况三 我怎么知道各个组件干啥用的? 1.内事不决问百度,外事不决问谷歌。。。懒的话我也没招 2.以Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum文件内容为例, ServerComponent Description="Telnet Client uses the Telnet protocol to connect to a remote Telnet server and run applications on that server." DisplayName="Telnet Client" Id="44" Type="Feature" 组件功能:Telnet Client uses the Telnet protocol to connect to a remote Telnet server and run applications on that server. 组件显示名称:Telnet Client 所以,多看看mum文件 3.拆包Manifests文件研究去。这个内容不再此次讨论范围,因为我没试过。
4.搜索大佬们分享出来的组件对应关系,和名称,已经精简的影响,这里我不再贴了。需要的私信算了,有时间我会发的。
第三部分:组件精简 1.只说我走过的弯路:以离线安装了net3.5为例:你会发现,好多组件精简后都会报错,所以不要离线集成一些功能。 2.精简组件还能保持在线自动更新: 以19041.172版本为例(其他版本一样) 比如
Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~~10.0.19041.1.mum,这个组件,~~10.0.19041.1.这个版本号只有初始的.1版本,那么这个没有其他版本,那么这个组件精简后大概率不会影响更新,小概率是因为和其他组件有关联。 如果这个组件还有10.0.19041.153或者10.0.19041.84(版本我随便举的),也就是说除了.1初始版本以外还有其他版本,那么精简以后,大概率更新失败。 后遗症:后期微软如果对这个10.0.19041.1的初始版本组件有更新,你自动更新也会失败。 虽然自动更新失败,但是好像也有其他方法安装上,我不会,需要大佬们赐教。
|