• 普通windows版本安装winServer的特色功能 以dedup功能为展示点


    安装 Windows 功能角色

    1、选择安装源

    在 Windows 8.1 系统上不存在重复数据删除功能,需要从对应的服务器版本,即 Windows Server 2012 R2 上提取相关文件。

    2、提取文件

    安装源中的目录和文件很多,我们只需要要三个目录:
    WINDOWSservicingPackages,包文件;
    WINDOWSwinsxs:程序集文件。除了程序集子目录之外,其他的子目录不需要;
    WINDOWSwinsxsManifests:清单文件。

    把这三个目录中的子目录和文件到复制一个目录下。假设全部文件、目录都复制到 s:4Packages 中。

    3、增量压缩

    增量压缩:Delta Compression
    为什么要说到增量压缩呢?是因为复制到 s:4Packages 中的文件许多都是经过增量压缩的,如果用记事本打开,能看懂的只有开头的 DCN PA30 之类的内容,其余部分都是些乱码。
    再说说文件标识。
    DC,应该就是增量压缩的缩写,N 表示某种类型的压缩;除 DCN 外,还有 DCD、DCM。PA30 应该是增量压缩的版本,表示这种压缩是使用 msdelta.dll 作为引擎的,解压缩也使用 msdelta.dll ;还有一种版本 PA19,使用 mspatchc.dll 进行压缩,使用 mspatcha.dll 进行解压缩(解压缩又称为应用,apply)。

    4、安装前的准备

    禁用 Hash 测试。
    因为默认的程序集文件应该是未压缩的,但是,我们从安装光盘中提取的文件是经过压缩的,在安装包时,系统要对程序集文件进行 Hash 测试,肯定无法通过测试。为此,必须关闭 Hash 测试的功能。需要在注册表中添加一个属性 DisableFileHashVerification,类型为 DWORD,值为 1,位置在 HKLMSOFTWAREMicrosoftWindowsCurrentVersionSideBySideConfiguration。

    5、安装包

    安装包使用的命令:Dism
    Dism /online /Add-Package /PackagePath:包文件的路径
    重复数据删除是文件服务角色中的一项功能,它依赖文件服务的某些基础功能,即 Microsoft-Windows-FileServer-Package 包。
    Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum
    Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum
    Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum
    Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

    6、启用功能前的准备

    这一步非常关键,因为几乎所有的出错都与这里的设置有关。如果提取的文件是未经过压缩的原始文件,这一步可以跳过。
    前面说过,重复数据删除功能涉及到十个程序集,其中有三个系统已经安装。
    在包的安装过程中,注册表中的内容是应该自动写上的,但不一定。如果功能无法启用,可以参照附表对相关注册表值进行设置。注册表的位置为 HKLMCOMPONENTSDerivedDataComponents,文件为 WindowsSystem32ConfigComponents。
    需要注意的是,通常情况下,HKLMCOMPONENTS 并不加载,需要加载以后,才能进行后续的操作。

    7、启用功能

    Enable-WindowsOptionalFeature -Online -FeatureName File-Services
    Enable-WindowsOptionalFeature -Online -FeatureName CoreFileServer
    Enable-WindowsOptionalFeature -Online -FeatureName Dedup-Core

    8、验证

    如果安装成功完成,下面的命令就可以运行了。
    查看有关有关重复数据删除的命令:get-command dedup
    启用对磁盘的重复数据删除:Enable-DedupVolume T:
    扫描磁盘,计算重复数据删除后的状态:Update-DedupStatus T:
    返回重复数据删除后的状态:Get-DedupStatus

    我们想要介绍的是如何安装在当前 Windows 版本中没有的功能。

    我们知道,同一个版本号(version)的Windows,有不同的版本类型(edition),比如,标准版、专业版、企业版,以及对应的服务器版本类型(到底有多少类型的版本,可以看看Windowsservicingeditions 下的文件)。如果我们安装了企业版以后,发现还想使用专业版的某些功能,如媒体中心,是重装系统吗?看过本文以后,你可能会多一个选择。本文以Windows 8.1为例,介绍如何安装Windows Server 2012 R2 的重复数据删除功能。

    一、系统的组成

    Windows 是操作系统,那么,这个完整的体系又是由什么组成的呢?从安装功能角色的角度来看,大体可以分成这样几级:系统、角色、功能、包、程序集和清单。即:

    系统是由多个角色组成;

    一个角色由一个或多个功能组成;

    一个功能由一个或多个包组成,一个包也可能包含多个功能;

    一个包由一个或多个程序集和清单组成,一个程序集对应一个清单(这样说,不严谨,但不影响结果)。

    这一思想应该是从 Windows Vista开始就有了,只是在不同的版本之间,概念上会有所变化,具体操作的命令也不尽相同。

    系统、角色、功能是逻辑上的概念,且功能与角色并无本质区别,真正物理存在的是包、程序集和清单。

    包文件,WINDOWSservicingPackages

    程序集文件,WINDOWSwinsxs

    清单文件,WINDOWSwinsxsManifests

    下面就分别作一点简单介绍。

    1、系统是由多个角色组成

    这一点不言而喻的。

    2、一个角色由一个或多个功能组成

    对应于服务器版本上的选择角色界面。

    比如 Hyper-V 角色,由这样一些功能组成:

    Get-WindowsOptionalFeature-Online -FeatureName *hyper-v* | select FeatureName

    Microsoft-Hyper-V

    Microsoft-Hyper-V-Offline

    Microsoft-Hyper-V-Online

    RSAT-Hyper-V-Tools-Feature

    Microsoft-Hyper-V-Management-Clients

    Microsoft-Hyper-V-Management-PowerShell

    前面的命令表明,角色这一层纯粹是逻辑上的;且在非服务器版本的系统上,就没有选择角色的界面。

    功能之间有依赖关系。通过下面的命令,可以知道,Dedup-Core 功能要依赖 File-Services 功能。

    Get-WindowsOptionalFeature-Online -FeatureName Dedup-Core

    Feature Name      : Dedup-Core

    Display Name      : 数据删除重复

    Description       : 通过应用区块级别删除重复和压缩来减少数据所需的物理存储量。

    Restart Required  : Possible

    State             : Enabled

    Custom Properties :ServerComponentDescription : 重复数据删除为卷上的相同数据存储单一副本,从而节省了磁盘空间。

                        ServerComponentDisplayName:数据删除重复

                        ServerComponentId : 436

                        ServerComponentParent: File-Services

                        ServerComponentType :RoleService

                        ServerComponentUniqueName :FS-Data-Deduplication

                       ServerComponentNonAncestorDependenciesServerComponentUniqueName :FS-FileServer

                       ServerComponentDeploysUpdateName : Dedup-Core

                        ServerComponentSystemServicesSystemServiceDefaultMonitoring: false

                       ServerComponentSystemServicesSystemServiceName : ddpsvc

    3、一个功能由一个或多个包组成,一个包中也可能包含多个功能

    重复数据删除(Dedup-Core)是文件和存储服务角色中的一个功能,是由两个功能包和对应的语言包组成:

    Microsoft-Windows-Dedup-ChunkLibrary-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

    Microsoft-Windows-Dedup-ChunkLibrary-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

    Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

    Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

    文件名太长,是看这种文章(或日志文件)的困难之处,一会儿眼就花了。

    每一个包文件,还有一个对应的证书文件,扩展名为 .cat。因为包文件是纯文本文件,有了证书文件,可以保证在图形界面下,包文件是不能修改的;在非图形界面(即WinRE环境)下是可以修改的。

    为什么选择用这个功能进行演示呢?大体有这样几个原因,一是实用,启用重复数据删除以后,可以节省大量的磁盘空间。有了虚拟机以后,我们会发现,再大的磁盘也不够用,启用了重复数据删除功能以后,节省磁盘空间的效果非常明显;二是这个功能具有代表性,三是相对简单。

    现在就说说它的代表性,重复数据删除功能有两个包:

    这两个包是两种类型,第一个包Microsoft-Windows-Dedup-ChunkLibrary-Package,是系统自动安装的,在客户机和服务器版本上都有;第二个包Microsoft-Windows-Dedup-Package,只在服务器版本上才有。另外,从 Windows8.1 开始,增加了组件的增量压缩功能。

    4、一个包由一个或多个程序集和清单组成,一个程序集对应一个清单

    程序集也称为组件。

    Microsoft-Windows-Dedup-ChunkLibrary-Package包对应了三个程序集:

    amd64_microsoft-windows-dedup-chunklibrary_31bf3856ad364e35_6.3.9600.16384_none_b739226fcac7b86b

    amd64_microsoft-windows-dedup-common_31bf3856ad364e35_6.3.9600.16384_none_24924b7b049f1064

    amd64_microsoft-windows-dedup-common.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_735de6f4f3c9bf01

    Microsoft-Windows-Dedup-Package包对应了七个程序集:

    amd64_microsoft-windows-dedup-service_31bf3856ad364e35_6.3.9600.16384_none_bfb8b8d13d6b64ec

    amd64_microsoft-windows-dedup-pipeline_31bf3856ad364e35_6.3.9600.16384_none_4a1a2e1b94c17293

    amd64_microsoft-windows-dedup-backup_31bf3856ad364e35_6.3.9600.16384_none_082618006d52d13d

    amd64_microsoft-windows-dedup-vsswriter_31bf3856ad364e35_6.3.9600.16384_none_6a34e1622afa6abc

    amd64_microsoft-windows-d..p-service.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_ef122ebc772ca755

    amd64_microsoft-windows-dedup-filter_31bf3856ad364e35_6.3.9600.16384_none_f8cff29f2baf02c3

    amd64_microsoft-windows-fsdm-hostprocess_31bf3856ad364e35_6.3.9600.16384_none_1dcf65c39dce3a7c

    每个程序集对应于磁盘上的一个目录,在目录下有若干文件,还可能有子目录,包安装时,会从安装源复制到WindowsWinsxs目录下;每个程序集还有一个清单文件,名字与目录名相同,扩展名为manifest,复制到WindowsWinsxsManifests目录下。启用功能时,组件对应的文件会复制到系统目录,必要时,还会创建服务等。从 Vista 开始,管理系统是以组件为单位了,不再基于 INF 了。

    两个包对应的分发清单文件:

    amd64_microsoft-windows-d..klibrary-deployment_31bf3856ad364e35_6.3.9600.16384_none_586b9e5d057f82e3.manifest

    amd64_microsoft-windows-dedup-deployment_31bf3856ad364e35_6.3.9600.16384_none_417674c644d0189e.manifest

     二、提取文件与增量压缩

     

    1、选择安装源

     

    在 Windows 8.1 系统上不存在重复数据删除功能,需要从对应的服务器版本,即 Windows Server 2012 R2 上提取相关文件。

    客户机与服务器对应表

    客户机

    服务器

    主版本号

    Windows 8.1

    Windows 2012 R2

    6.3

    Windows 8

    Windows 2012

    6.2

    Windows 7

    Windows 2008 R2

    6.1

    Windows Vista

    Windows 2008

    6.0

     

    在 Windows Server 2012 R2光盘上的 Soures 目录下找到 install.wim 文件,用新版本的压缩软件打开,会看到有1、2、3、4这样的目录,分别对应标准版核心、标准版、数据中心版核心、数据中心版。其中数据中心版的功能最全,但对于我们演示的重复数据删除功能来说,这四个版本没有区别。没有正式版本的光盘也不要紧,完全可以从微软站点上下载试用版本;另外,不要用新版本的光盘,最好用最原始版本,因为新版本上会有更多的文件被压缩,给操作带来不必要的麻烦。

    如果从正常运行的系统中提取文件,应该使用启用了相关功能,且未打过补丁的系统。

     

    2、提取文件

     

    安装源中的目录和文件很多,我们只需要要三个目录:

    WINDOWSservicingPackages,包文件;

    WINDOWSwinsxs:程序集文件。除了程序集子目录之外,其他的子目录不需要;

    WINDOWSwinsxsManifests:清单文件。

     

    把这三个目录中的子目录和文件到复制一个目录下。由于文件和目录有几万个,复制的过程很漫长而无聊。以前在DOS年代,有一个命令 append可以把目录拼接在一起,相当于在一个目录中操作,现在反而没有了;另外,安装包的命令 dism只能指定一个安装源,因此,再无聊也得复制了。

    假设全部文件、目录都复制到 s:4Packages中。

     

    3、增量压缩

     

    增量压缩:Delta Compression

    远程差分压缩:Remote Differential Compression

    单实例存储:Single Instance Store

    重复数据删除:Data Deduplication

     尽管这些概念都提到了压缩,但是,其核心思想不在于压缩,而在于单实例存储,即,相同的部分只保存一份,只是有的在文件级别,有的在磁盘级别。

    为什么要说到增量压缩呢?是因为复制到s:4Packages 中的文件许多都是经过增量压缩的,如果用记事本打开,能看懂的只有开头的 DCN PA30 之类的内容,其余部分都是些乱码。

    增量压缩,是根据两个文件的差进行的,以其中的一个版本(通常为最新版本)为基准,暂时不需要的版本(通常为老版本)就保存了相对基准文件的差。

    同一个文件不版本之间的差别通常不大,有的甚至完全相同,因此,增量压缩可以显著节省磁盘空间。

    有两种情况下会发生增量压缩:一是功能尚未启用,暂时用不到的文件就以压缩的形式保存(但不是立即进行压缩),一旦启用某个功能,与之相关的文件会自动解压;二是安装了某个程序集的新版本补丁,新版本文件以未压缩的形式保存,被取代的版本以增量压缩的形式保存,如果卸载了新版本,老版本的文件会自动解压缩。

    执行任务计划,会强制进行压缩。

    schtasks.exe /Run /TN"MicrosoftWindowsServicingStartComponentCleanup"

    再说说文件标识。

    DC,应该就是增量压缩的缩写,N表示某种类型的压缩;除 DCN外,还有 DCD、DCM。PA30应该是增量压缩的版本,表示这种压缩是使用 msdelta.dll作为引擎的,解压缩也使用 msdelta.dll;还有一种版本 PA19,使用mspatchc.dll进行压缩,使用 mspatcha.dll进行解压缩(解压缩又称为应用,apply)。

     

    压缩类型

    文件标识

    注册表值

    有基准的压缩

    DCD

    CF:10;f!XXX:3

    有 CTS 和 DV

    无基准的压缩

    DCN

    CF:200

    f!XXX:21

    清单文件的压缩

    DCM

    CF:c

    未压缩

     

    CF:0;f!XXX:1

    由于这方面的资料太少,上面内容猜测成分较多,不足全信。想详细了解文件标识的内容,可参考 Windows SDK中的 msdelta.h 文件。

     

    三、安装包

     

    1、安装前的准备

    禁用 Hash 测试

    因为默认的程序集文件应该是未压缩的,但是,我们从安装光盘中提取的文件是经过压缩的,在安装包时,系统要对程序集文件进行Hash测试,肯定无法通过测试。为此,必须关闭 Hash 测试的功能。需要在注册表中添加一个属性 DisableFileHashVerification,类型为 DWORD,值为 1,位置在HKLMSOFTWAREMicrosoftWindowsCurrentVersionSideBySideConfiguration。

    2、安装包

    安装包使用的命令:Dism

    Dism /online /Add-Package/PackagePath:包文件的路径

    前面说过,重复数据删除是文件服务角色中的一项功能,它还依赖文件服务的某些基础功能,即 Microsoft-Windows-FileServer-Package包。

    Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

    Dism /online /Add-Package /PackagePath:Microsoft-Windows-FileServer-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

    Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~6.3.9600.16384.mum

    Dism /online /Add-Package /PackagePath:Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~zh-CN~6.3.9600.16384.mum

    3、启用功能前的准备

    这一步非常关键,因为几乎所有的出错都与这里的设置有关。如果提取的文件是未经过压缩的原始文件,这一步可以跳过。

    前面说过,重复数据删除功能涉及到十个程序集,其中有三个系统已经安装。

    在包的安装过程中,注册表中的内容是应该自动写上的,但是,安装了若干次,只有一两次是正确的,大部分都是不成功的,具体原因不详。如果注册表中的设置不正确,就不能正常解压缩,功能就无法启用。

    如果功能无法启用,可以参照附表对相关注册表值进行设置。注册表的位置为HKLMCOMPONENTSDerivedDataComponents,文件为WindowsSystem32ConfigComponents。

    需要注意的是,通常情况下,HKLMCOMPONENTS并不加载,需要加载以后,才能进行后续的操作。

    4、启用功能

    Enable-WindowsOptionalFeature-Online -FeatureName File-Services

    Enable-WindowsOptionalFeature-Online -FeatureName CoreFileServer

    Enable-WindowsOptionalFeature-Online -FeatureName Dedup-Core

     前面两条命令说明,一个包(FileServer)包含了两个功能,后面一条命令说明,两个包组成一个功能。

    5、验证

    如果安装成功完成,下面的命令就可以运行了。

    查看有关有关重复数据删除的命令:get-command *dedup*

    启用对磁盘的重复数据删除:Enable-DedupVolumeT:

    扫描磁盘,计算重复数据删除后的状态:Update-DedupStatusT:

    返回重复数据删除后的状态:Get-DedupStatus

    这可能是系统最慢的命令了,执行以后不会立即看到效果,看到效果一般要等到两天之后。

    四、排错

    常见的错误有以下几个:

    1、无法读取配置注册表项

    enable-WindowsOptionalFeature: 无法读取配置注册表项。

    这是由于没有正确安装并启用 FileServer,参见前面的内容。

    2、组件的文件跟组件清单中的验证信息不匹配

    这是由于没有禁用Hash 测试,参见前面的内容。

    3、0x800f0922

    Enable-WindowsOptionalFeature: Enable-WindowsOptionalFeature失败。错误代码 = 0x800f0922

    这是由于在启用重复数据删除功能时,没有正确设置注册表中相关增量压缩的值,参见前面的内容。

    但需要注意的是,如果已经启用过重复数据删除功能,虽然没有成功,那么,有可能部分文件已经成功解压缩了。这时,已经解压缩的文件就不能再设置为21了;如果设置为 21,就表示还需要解压缩,肯定要出错。

    4、0x8056530b、0x80565306

    Enable-DedupVolume :MSFT_DedupVolume.Volume='c:' - HRESULT 0x8056530b,不支持指定的卷类型。固定的、支持写入的NTFS数据卷以及由NTFS 数据卷提供支持的CSV 支持重复数据删除。

    这是由于不能对系统卷、网络路径进行重复数据删除。

    5、0x800f0830

    指定的映像不再可用,可能已损坏。

    请放弃修改后的映像。然后重新开始。

    这个错误真的很小,找到注册表HKLMSOFTWAREMicrosoftWindowsCurrentVersionComponentBased Servicing,删除属性Unserviceable,或改成 0 即可,但微软居然就让我们放弃,不知是何原因。

    另外,还有几个错误有必要提一下,但限于篇幅,只略作提示。如果不能理解,就说明没有碰到,直接忽略。

    1、找不到引用的汇编

    缺少 HKLMComponentsDerivedDataComponentsIdentity

    2、参照的程序没有安装在系统上

    缺少 HKLMComponentsDerivedDataVersionedIndexXXX (winblue_rXXX)ComponentFamiliesComponentsFamily中的V!XXX

    缺少HKLMComponentsDerivedDataComponentsIdentity

     3、组件存储已损坏

    缺少程序集或清单文件

    缺少 HKLMComponentsDerivedDataVersionedIndexXXX (winblue_rXXX)ComponentFamiliesComponentsFamily

    4、一个或多个事务不存在

    缺少 HKLMSOFTWAREMicrosoftWindowsCurrentVersionSideBySideWinnersWinners

    错误是列举不完的,最终还需要自己看日志。主要有两个:

    1、WindowsLogsCBSCBS.log

    这个文件的内容非常丰富,只是刚开始可能不容易看得懂,可以参考微软的一篇文章《可选组件安装日志诊断程序》。

    尽管 dism 命令提示出错要看DISM 日志文件,WINDOWSLogsDISMdism.log。但这个文件在图形界面下几乎没有用处,可以不看,只有在 WinRE 环境下才需要看这个文件。

    2、WindowsInfsetupapi.dev.log

    涉及到安装驱动程序,提示不能完成更新的,一定要看看这个文件。

    最后要说的,看到本文,微软会不会不高兴?

    附表:重复数据删除组件的注册表值

    amd64_microsoft-windows-dedup-common_31bf3856ad364e35_6.3.9600.16384_none_24924b7b049f1064

    CF = 200

    f!ddp_ps.dll_549a992a3c8616e4= 21

    f!ddputils.dll = 21

    f!ddptrace.dll = 21

    f!ddp.mof = 21

    amd64_microsoft-windows-dedup-common.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_735de6f4f3c9bf01

    CF = 200

    f!ddp.mfl = 1

    f!ddputils.dll.mui = 21

    amd64_microsoft-windows-dedup-vsswriter_31bf3856ad364e35_6.3.9600.16384_none_6a34e1622afa6abc

    CF = 200

    f!ddpvssvc.dll = 21

    amd64_microsoft-windows-dedup-service_31bf3856ad364e35_6.3.9600.16384_none_bfb8b8d13d6b64ec

    f!dedupfilemetadata.cdxml= 1

    f!ddpsvc.dll = 21

    f!deduplication.psd1 = 1

    f!ddpeval.exe = 21

    f!dedupjob.cdxml = 21

    f!ddpwmi.dll = 21

    f!ddpcli.exe = 21

    f!dedupmetadata.cdxml = 1

    f!deduplication.types.ps1xm_9ba49f296646713d= 21

    f!dedupstatus.cdxml = 1

    f!dedupschedule.cdxml = 21

    f!dedupvolume.cdxml = 21

    f!deduplication.format.ps1x_74de558af5a08661= 21

    f!deduplicationprovider.mof= 21

    CF = 200

    amd64_microsoft-windows-dedup-pipeline_31bf3856ad364e35_6.3.9600.16384_none_4a1a2e1b94c17293

    CF = 200

    f!ddppipeline.dll = 21

    f!ddpscan.dll = 21

    f!ddpstore.dll = 21

    amd64_microsoft-windows-dedup-backup_31bf3856ad364e35_6.3.9600.16384_none_082618006d52d13d

    CF = 200

    f!ddpbackup.dll = 21

    amd64_microsoft-windows-d..p-service.resources_31bf3856ad364e35_6.3.9600.16384_zh-cn_ef122ebc772ca755

    CF = 200

    f!ddpsvc.dll.mui = 21

    f!deduplicationprovider.mfl= 21

    f!ddpwmi.dll.mui = 21

    amd64_microsoft-windows-dedup-filter_31bf3856ad364e35_6.3.9600.16384_none_f8cff29f2baf02c3

    CF = 200

    f!dedup.sys = 21

    amd64_microsoft-windows-dedup-chunklibrary_31bf3856ad364e35_6.3.9600.16384_none_b739226fcac7b86b

    CF = 200

    f!ddpchunk.dll = 21

    amd64_microsoft-windows-fsdm-hostprocess_31bf3856ad364e35_6.3.9600.16384_none_1dcf65c39dce3a7c

    CF = 200

    f!fsdmhost.exe = 21

    注:这是以从光盘中提取文件为基准的设置值。

  • 相关阅读:
    C# NameValueCollection
    visual studio使用技巧创建自己代码片段
    C#在DataTable中使用LINQ
    [转]C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件讨论
    C#自定义控件在添加引用后不显示在工具箱的解决方法
    Java 工程师
    redis-CRC16
    sql server-当天日期减去一天 应该如何写
    清除访问Windows共享时缓存的凭据
    cmd下查看当前登陆用户
  • 原文地址:https://www.cnblogs.com/qiaoyanlin/p/6820224.html
Copyright © 2020-2023  润新知