首页 > 解决方案 > 以非管理员身份运行但不以管理员身份运行时可见的注册表项

问题描述

当使用 powershell 或在 regedit 中作为普通用户帐户查询时,我有一个可见的注册表项。但是当我以管理员身份运行 powershell 或 regedit 时,它不会出现:

非管理员:

PS C:\> Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath}  | ? { $_.DisplayName -eq "Docker Desktop" }


DisplayIcon     : C:\Program Files\Docker\Docker\Docker Desktop Installer.exe
DisplayName     : Docker Desktop
DisplayVersion  : 2.2.0.4
Version         : 43472
InstallLocation : C:\Program Files\Docker\Docker
NoModify        : 1
NoRepair        : 1
Publisher       : Docker Inc.
ChannelName     : stable
ChannelUrl      : https://download.docker.com/win/stable/appcast.xml
UninstallString : "C:\Program Files\Docker\Docker\Docker Desktop Installer.exe" uninstall
PSPath          : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\unin
                  stall\Docker Desktop
PSParentPath    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\unin
                  stall
PSChildName     : Docker Desktop
PSProvider      : Microsoft.PowerShell.Core\Registry

行政:

PS C:\> Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath}  | ? { $_.DisplayName -eq "Docker Desktop" }
PS C:\>

以管理员和非管理员身份运行 regedit 时会观察到相同的行为。我正在使用 Avecto DefendPoint 以管理员身份运行命令提示符(和注册表编辑器) - 我不是本地管理员组的成员。这可能与它有关,但我能够在此注册表路径下创建和删除键。有趣的是,我可以作为管理员创建一个“Docker Desktop”密钥,它不会因为密钥已经存在而失败。我已经尝试过RegDelNull但这不是嵌入式 null 问题。

我正在尝试删除注册表项,因为 Docker Desktop 仍在添加/删除程序中。我无法从那里卸载它,但按照https://success.docker.com/article/how-to-completely-remove-docker-in-windows-10中的步骤操作

标签: dockerregistryregedit

解决方案


注册表中有“自动”位重定向。

例如HKLM\SORTWARE\Mirosoft\Windows\Currentversion\Uninstall,可能会映射到HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall64 位系统,具体取决于用于检索注册表项的 API。

当涉及到取决于用户的位映射时,我经历了很多奇怪的注册表行为(例如,参见https://github.com/poweradminllc/PAExec/issues/29)。

我建议您使用 Microsoft PSTools PSexec 作为系统用户调用 regedit(或您的 powershell 脚本),而不是查看上述两个位置。

C:\>PSExec.exe -i -s regedit

希望这可以帮助 :)

编辑:虽然不太可能,但您也可以查看用户特定的注册表配置单元,即HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall作为标准用户。

以管理员身份启动 regedit 后,导航到HKEY_USERS\S-1-5-21-XXXXXXXXX-XXXXXXXXX-XXXXXXXXX-1001\Software\Microsoft\Windows\CurrentVersion\UninstallSID (S-1-5-21-*-1001) 是非管理员用户的 SID 的位置。

SID 可以通过whoami /user命令获取。


推荐阅读