调试层完整性消息
当您关闭打包机并运行“关机以完成定稿”时,它会调用
uniservice.exe 来获取当前层完整性状态。“关机以完成定稿”正在检查是否有任何必需的进程仍在挂起。如果必需的进程未关闭,它会向您显示有关挂起问题的消息。App Layering 会将此信息写入以下日志文件:
C:\Program Files\Unidesk\Uniservice\Log\LayerIntegrity.txt C:\Program Files\Unidesk\Uniservice\Log\UniBilcLogs_X.txt
您无法确切知道它正在使用哪个
UniBilcLogs 文件,因此请查找时间戳最新的文件。搜索“Integrity”。
您可能认为可以通过关闭计算机并完成定稿来绕过层完整性检查。但如果您尝试这样做,App Layering 设备会停止任务并将您返回到打包机。“关机以完成定稿”脚本必须完成层定稿过程。
层完整性警告
以下层完整性消息会告知您在层准备好完成定稿之前必须完成哪些排队操作:
-
“RunOnce 脚本未完成 - 请检查并重新启动打包机。”
-
“安装后重新启动挂起 - 请检查并重新启动打包机。”
-
“Microsoft
ngen操作正在后台进行。” -
“MSI 安装操作正在进行中 - 请检查打包机。”
-
“重新启动挂起以更新启动磁盘上的驱动程序 - 请检查并重新启动打包机。”
-
“需要 Microsoft ngen 操作。”
-
“Software Center Client 已配置为运行,但 SMSCFG.INI 仍然存在。”
您无法通过关闭计算机来绕过层完整性消息。App Layering 软件会停止并将您返回到打包机,直到所有进程都已完成。
如果 Microsoft
NGen 操作正在进行中,您可以尝试加快其速度,具体方法见下一节。
“RunOnce 脚本待处理”
创建层或向其中添加版本时,可以指定一个脚本,以便在用户桌面启动(或重新启动)后首次登录时运行。例如,您可以使用 Run Once 脚本来完成应用程序的设置。 Run Once 脚本是安装在层上的
.cmd 或 .bat 文件。
Run Once 脚本在映像上运行后,Windows 通常会在重新启动时删除关联的注册表项。此消息表示 Windows 未从以下位置之一删除 Run Once 脚本的密钥:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
要解决此问题:
-
如果脚本文件不再存在,请删除注册表项。
-
如果消息中引用的脚本存在,请手动运行该脚本,然后删除注册表项。
“安装后重新启动待处理”
此消息源自以下任何注册表项:
-
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired -
HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\NETLOGON\Start -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME
-
如果您看到其中一个条目,请先重新启动。如有必要,请多次重新启动,直到您确定该消息不是某些软件发出的真实重新启动请求。
-
如果问题出在 Net Logon 上,请重新启动
Unidesk Service for Message Management。 -
检查是否存在上一个列表中的前三个注册表项之一:
-
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
-
-
手动修改这些键以满足您的需求。如果您不需要这些键,可以将其删除。
-
查找
NetLogon键中的更改,以查看是否:-
该值与启动时的值不同。
-
计算机名称与活动计算机名称不同。
如果存在差异,请修复该设置。 -
-
确定域加入操作是否仍在等待重新启动。
-
HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\NETLOGON\Start -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\ACTIVECOMPUTERNAME -
HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\COMPUTERNAME\COMPUTERNAME
您无法修改这三个注册表项,但某些软件可以在每次重新启动时修改NETLOGON\Start项。 -
在清理了步骤 #1 中列出的前三个键后,如果重新启动时仍然收到提示,您可以选择忽略层完整性检查。然而,这是一种最后的手段,通常不建议这样做。有关如何忽略层完整性检查的详细信息,请参阅本文末尾的“最后手段”部分。
“Microsoft ngen 操作正在后台进行”
此消息表示前台或后台
NGEN 操作仍在进行中。NGEN 操作是将 .Net 程序集编译为本机映像的过程。此消息意味着该过程仍在进行中。您可以查看进度。
警告:
请勿重新启动,因为这可能导致进程重新开始。
要在前台查看进度,请运行
ngen eqi 3。或者,等待并定期运行 ngen queue status 以查看进程的进展情况。请记住,运行 ngen queue status 会减慢后台进程,因为每次您在前台检查其状态时,后台进程都会暂停。
让
NGEN 进程完成很重要。请耐心等待。如果您在过程中终止进程或重新启动,可能会导致 .Net 程序集部分写入。
如果后台进程(例如
MSCORSVW.EXE(NET 运行时优化服务))在一天内未完成,请检查是否存在过时的后台进程。重新启动可能会有所帮助。
以下服务运行完成后,您可以继续:
-
ngen.exe -
ngentask.exe -
mscorsvw.exe
“MSI 安装操作正在进行中”
此消息表示存在一个名为
Global\_MSIExecute 的系统互斥体(互斥对象)。MSI 安装程序使用 Global\_MSIExecute 来确保一次只有一个安装程序运行。如果您确定没有 MSI 安装正在进行,则可能存在资源锁定。返回到层中,找出哪个进程被锁定。
“正在等待重启以更新启动磁盘上的驱动程序”
此消息表示已修改或安装了设置为在系统启动时启动的服务或驱动程序。修改后的驱动程序能够成功启动非常重要。
通常,您只需重启一次,驱动程序即可正常工作。我们有时会看到某些软件(如 Microsoft Defender 或 McAfee)尝试在每次启动时修改其驱动程序文件,从而每次都触发此完整性检查。重启无法清除此问题。您可能需要使用绕过层完整性检查的选项,如下面“最后手段”一节所述。
“需要执行 Microsoft NGen 操作”
此消息表示应用程序已安装在打包计算机上,并且已将项目安排为以优先级 3 进行更新。
在此优先级下,操作仅在 CPU 空闲时运行,并且会一直等待直到没有更多活动。
为确保应用程序在发布的映像上以最佳方式运行,App Layering 会阻止最终确定过程,因为
NGEN 进程需要在打包计算机上运行,而不是在部署应用程序的每台计算机上运行。
对于
NGEN eqi 3(优先级 3),您可以选择:
-
运行以下两个目录中未完成的操作:
-
c:\windows\microsoft.net\framework\vYY.MM.Build -
c:\windows\microsoft.net\framework64\v4.0.30319
-
-
等待。
NGEN操作通常在空闲 15 分钟后自行运行。
正在检查的值包括:
-
HKLM\SOFTWARE\Microsoft\\.NETFramework\v2.0.50727\NGenService\Roots\WorkPending
-
HKLM\SOFTWARE\WOW6432Node\Microsoft\\.NETFramework\v2.0.50727\NGenService\Roots\WorkPending
值为 1 表示有工作项排队等待处理。
"Software Center Client 已配置为运行,但 SMSCFG.INI 仍然存在...."
此消息表示此计算机已将
ccmexec.exe 配置为服务,并且未配置为禁用。
由于我们知道在打包计算机上创建的任何层都需要正确密封才能在 VDI 环境中正确部署,因此我们正在检查以确保
SMSCFG.ini 不存在。在层的最末尾有一个命令文件供您运行。我们提供了可在批处理命令文件中运行的命令,您可以使用这些命令来密封层。以管理员身份登录到命令窗口以运行此脚本:
c:\windows\setup\scripts\SEALSCCMCLIENT.cmd
加速 Microsoft NGen 操作
NGEN 可执行文件是 Microsoft 本机映像生成器。它是 .NET 系统的一部分。Ngen 将 .NET 字节码重新编译为本机映像并构建注册表项。Windows 根据安装的内容以及 Windows 在配置中检测到的内容来确定何时运行 NGEN。当 NGEN 运行时,务必让它完成。中断的 NGEN 操作可能会导致 .NET 程序集无法正常工作,或 .NET 系统中出现其他问题。
您可以选择等待
NGEN 进程在后台完成,或将其强制到前台。您还可以检查 NGEN 操作的状态,如以下步骤所述。但是,每次检查队列状态时,都会创建前台活动,这可能会导致后台处理暂时暂停。
将
NGEN 进程带到前台可让您查看进度。进程完成后,您可以完成该层。
-
将
NGEN操作带到前台。通常,NGEN是一个后台操作,如果存在前台活动,它会暂停。将任务带到前台可以帮助任务尽快完成。为此:-
以管理员身份打开命令提示符。
-
转到当前使用的 Microsoft .NET Framework 目录:
cd C:\Windows\Microsoft.NET\FrameworkNN\vX.X.XXXXX -
输入
NGEN命令以执行排队项:ngen eqi 3 -
这会将
NGEN任务带到命令提示符的前台,并列出正在编译的程序集。注意:如果您收到多条“编译失败”消息,请在任务管理器中查看是否有MSCORSVW.EXE实例正在运行。如果正在运行,请让它完成,或重新运行NGEN eqi 3。请勿通过重启来停止任务。 任务必须完成。
-
-
检查
NGEN操作的状态-
以管理员身份打开命令提示符。
-
运行此命令检查状态:
NGEN queue status -
当您收到以下状态时,
NGEN已完成,您可以完成该层。.NET Runtime Optimization Service已停止,
-
处理层完整性问题的最后手段(不推荐)
如果某个层无法完成,您可以使用注册表项来指示该层忽略其层完整性检查。
警告: 仅将此项作为最后手段使用!App Layering 在这些情况下会阻止您完成。允许您完成一个层可能会对该层以及包含该层的映像造成不可挽回的损害。请务必首先尝试在 Windows 中解决问题!
若要忽略层上的层完整性消息(不推荐):
-
运行
regedit.exe并创建此项:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Uniservice: "BypassLayerCheck"=DWORD 1值不重要。重要的是该值存在。此步骤会阻止对层进行层完整性检查。它允许完成该层,无论它可能对该层以及包含它的分层映像造成何种损害。