admin 管理员组文章数量: 1184232
转至我的博客以获得更好的阅读体验
问题描述
- Office已经通过如 KMS ,激活码等方式激活成功了
-
每次打开Office时会弹出
Microsoft Office无法验证此应用程序的许可证的弹窗 - 进入Office的账户界面,显示Office已激活
-
(可选) 进入注册表编辑器,找不到
HKEY_USERS\S-1-5-20
温馨提示
- 请千万慎重修改任何注册表内容,包括权限,这可能导致你的账户无法访问。
- 在你编辑注册表之前请先备份一份原始的注册表。
解决方案
原理说明
弹出这个提示的真正原因就是因为
Office
无法
访问
NETWORK SERVICE
这个安全主体。
解决方案
那我们从两个方面看问题: 有没有 和 能不能
有没有
- 打开注册表编辑器,步骤如下
- 按下 Win + R
-
输入
regedit -
索引到
HKEY_USERS\ -
逐项检查有无
S-1-5-20这一项 - 若不存在请继续往下看;若存在请跳转到
不存在这一项,说明系统无法读取
NETWORK SERVICE
这一安全主体的
NTUSER.dat
,此时你通过以下代码尝试重新挂载,很可能是失败的。
reg load hkulS-1-5-20 C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT
也就是说原来的
NTUSER.dat
已经损坏了,那么现在我们尝试修复。
首先要搞清楚
NTUSER.dat
都负责着哪些功能:
-
它是
HKEY_CURRENT_USER的后端文件,它包含了用户所有**“个人化”**配置,比如:- 桌面布局(图标位置、壁纸、主题、分辨率)
- 文件资源管理器行为(显示隐藏文件、排序方式)
- 输入法配置、语言栏设置
- 快捷方式、任务栏固定项目
- 文件关联(例如 .txt 打开方式)
- 网络驱动器映射
- 加载为用户登录会话的配置快照
- 保存用户凭据、应用 Token 与 COM 组件注册信息
- 应用沙盒隔离的根依据(UWP 与 MSIX)
- 权限与账户 SID 绑定(尤其与 S-1-5-21 / S-1-20 关系)
-
与
UsrClass.dat联合作为“完整用户配置集”
NETWORK SERVICE
作为一个安全主体,不存在任何个人化配置,也不会保存任何凭据,不会安装任何的
UWP
类应用,所特殊的只有它存储着
S-1-5-20
的
sid
。
所以,我们只需要用一份原始的、默认的
NTUSER.dat
来替换损坏的,并给新的设置好
S-1-5-20
的
sid
即可。
那么具体的代码实现可以交给AI实现:
@echo off
title Office 激活修复工具 - 修复 NetworkService 注册表问题
color 0A
setlocal enabledelayedexpansion
:: =====================================================
:: 自动提权部分
:: =====================================================
:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
echo [提示] 当前未以管理员身份运行,正在尝试自动提权...
powershell -Command "Start-Process '%~f0' -Verb runAs"
exit /b
)
echo =====================================================
echo Office 激活修复工具 - NetworkService 修复
echo =====================================================
echo.
set "nsPath=%SystemRoot%\ServiceProfiles\NetworkService"
set "backupPath=%SystemRoot%\ServiceProfiles\NetworkService.backup"
set "timeTag=%date:~-4,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%"
:: =====================================================
:: 1. 停止可能占用的服务
:: =====================================================
echo [1] 停止 sppsvc 与 ClipSVC 服务...
net stop sppsvc >nul 2>&1
net stop ClipSVC >nul 2>&1
timeout /t 3 /nobreak >nul
:: =====================================================
:: 2. 检查并卸载残留注册表配置单元
:: =====================================================
reg query "HKU\S-1-5-20" >nul 2>&1
if %errorlevel% equ 0 (
echo [2] 检测到已加载的注册表配置单元,正在卸载...
reg unload "HKU\S-1-5-20" >nul 2>&1
if %errorlevel% neq 0 (
echo [警告] 无法卸载,可能被系统进程锁定。
echo 尝试继续修复。
)
)
:: =====================================================
:: 3. 备份原始 NTUSER.DAT
:: =====================================================
echo [3] 备份当前 NTUSER.DAT...
if exist "%nsPath%\NTUSER.DAT" (
if not exist "%backupPath%" mkdir "%backupPath%"
copy "%nsPath%\NTUSER.DAT" "%backupPath%\NTUSER.DAT.backup.%timeTag%" >nul
echo ✅ 已备份至 %backupPath%
) else (
echo ⚠ 未找到原始文件,将重新生成。
)
:: =====================================================
:: 4. 重建 NTUSER.DAT
:: =====================================================
echo [4] 正在重建 NetworkService 的 NTUSER.DAT...
set "sourceFound=0"
for %%s in (
"%SystemDrive%\Users\Default\NTUSER.DAT"
"%SystemRoot%\System32\config\systemprofile\NTUSER.DAT"
"%SystemRoot%\ServiceProfiles\LocalService\NTUSER.DAT"
) do (
if exist "%%s" if !sourceFound! equ 0 (
copy "%%s" "%nsPath%\NTUSER.DAT" /Y >nul
if !errorlevel! equ 0 (
set "sourceFound=1"
echo ✅ 使用模板: %%~s
)
)
)
if !sourceFound! equ 0 (
echo ⚠ 无可用模板,创建空文件...
type nul > "%nsPath%\NTUSER.DAT"
)
:: =====================================================
:: 5. 设置 NTUSER.DAT 文件权限
:: =====================================================
echo [5] 设置 NTUSER.DAT 文件权限...
icacls "%nsPath%\NTUSER.DAT" /inheritance:r >nul
icacls "%nsPath%\NTUSER.DAT" /grant:r "SYSTEM":F >nul
icacls "%nsPath%\NTUSER.DAT" /grant:r "NETWORK SERVICE":F >nul
icacls "%nsPath%\NTUSER.DAT" /grant:r "Administrators":F >nul
icacls "%nsPath%\NTUSER.DAT" /setowner "SYSTEM" >nul
echo ✅ 文件权限已修复
:: =====================================================
:: 6. 加载注册表配置单元并授予 ACL
:: =====================================================
echo [6] 加载注册表配置单元...
reg load "HKU\S-1-5-20" "%nsPath%\NTUSER.DAT" >nul 2>&1
if %errorlevel% neq 0 (
echo ❌ 注册表加载失败,可能被系统占用。
goto end
)
echo ✅ 注册表加载成功
echo [6.1] 初始化基本结构...
reg add "HKU\S-1-5-20\Software\Microsoft\Office" /f >nul
reg add "HKU\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer" /f >nul
reg add "HKU\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /f >nul
echo [6.2] 正在授予注册表访问权限(通过 PowerShell)...
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$key = Get-Item 'Registry::HKEY_USERS\\S-1-5-20';" ^
"$acl = $key.GetAccessControl();" ^
"$rules = @('NETWORK SERVICE','SYSTEM','Administrators');" ^
"foreach($r in $rules){" ^
" $rule = New-Object System.Security.AccessControl.RegistryAccessRule($r,'FullControl','ContainerInherit,ObjectInherit','None','Allow');" ^
" $acl.SetAccessRule($rule)" ^
"};" ^
"$key.SetAccessControl($acl)" >nul 2>&1
echo ✅ 已为注册表授予 NETWORK SERVICE 等完全访问权限
reg unload "HKU\S-1-5-20" >nul 2>&1
echo ✅ 注册表配置单元已卸载(权限写入生效)
:: =====================================================
:: 7. 重启相关服务
:: =====================================================
echo [7] 启动 sppsvc 与 ClipSVC 服务...
net start ClipSVC >nul 2>&1
net start sppsvc >nul 2>&1
echo ✅ 服务已重新启动
:: =====================================================
:: 8. Office 状态检查
:: =====================================================
echo [8] 检查 Office 激活状态(如有安装)...
if exist "%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" (
cscript //nologo "%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" /dstatus
) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\OSPP.VBS" (
cscript //nologo "%ProgramFiles(x86)%\Microsoft Office\Office16\OSPP.VBS" /dstatus
) else (
echo ⚠ 未检测到 Office 安装路径,跳过检查。
)
:done
echo.
echo =====================================================
echo ✅ 修复完成,请重新启动计算机。
echo =====================================================
pause
exit /b
将以上脚本保存到
.bat
文件中,双击运行,给予管理员权限,稍等几分钟后,你的问题应该会被解决。
能不能
既然存在,就说明是
Office
是因为权限的问题导致无法访问
NETWORK SERVICE
的了。
-
打开注册表编辑器,并索引到
HKEY_USERS\, -
右键
S-1-5-20,选择权限(P) -
点击
添加(D)... -
输入
NETWORK SERVICE并确认 -
在
组和用户名中选择NETWORK SERVICE -
在下面的
NETWORK SERVICE 的权限(P)中在 允许 那一栏勾选完全控制和读取 - 确认
现在你的问题应该已经被解决了
版权声明:本文标题:解决Microsoft Office无法验证此应用程序的许可证_office无法验证此产品的许可 修复尝试失败 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1773881718a3566792.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论