docker - 以非管理员身份运行但不以管理员身份运行时可见的注册表项
问题描述
当使用 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中的步骤操作
解决方案
注册表中有“自动”位重定向。
例如HKLM\SORTWARE\Mirosoft\Windows\Currentversion\Uninstall
,可能会映射到HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
64 位系统,具体取决于用于检索注册表项的 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\Uninstall
SID (S-1-5-21-*-1001) 是非管理员用户的 SID 的位置。
SID 可以通过whoami /user
命令获取。
推荐阅读
- vulkan - _WRITE_BIT 目标访问掩码是否暗示 _READ_BIT 访问范围?
- sql - 在最新组中查找最新组
- angular - 路由:重定向到单独的页面
- javascript - .addEventListner 的第二个参数,即回调函数正在执行而没有事件发生
- jquery - 动态创建字段上的动态日期选择器
- javascript - 将类方法从回调流转换为 Promise
- javascript - React Router V6 - 如果页面不存在则导航到主页导致浏览器“返回”按钮刷新/循环
- visual-studio - NuGet 重新安装将包更新到较新版本
- unity3d - Unity问题:如何使所有位置(带数组)初始化?
- algorithm - 引擎盖下的网络浏览器的工作历史