我目前正在为Windows的卸载程序实现一个“删除设置”功能,并遇到了一个我甚至不确定是否可能解决的问题。
该应用程序使用CredentialManager(keymgr.dll
)为当前用户存储凭据条目。让我们称凭据的目标为“X”。在卸载时,所有针对目标“X”的凭据都应从所有用户中删除。当然,卸载程序需要管理员权限,但我仍然发现这非常难以完成。
对于当前用户,该命令通常通过从命令提示符中输入 cmdkey /delete=:X
解决。据我所知,cmdkey.exe /list
仅帮助列出当前用户的条目,无法删除其他用户的本地条目。
我了解到,这些凭据是存储在C:\Users\_user_\AppData\Local\Microsoft\Credentials
文件夹下的操作系统文件,但我无法知道要删除的条目是哪些文件,删除所有文件会对其他应用程序造成风险。此外,我假设删除操作系统文件也会很危险,可能会有限制(额外的UAC提示?)。
runas
命令是我找到的最接近的一个方案,但由于它需要用户密码,因此变得非常困难,也不是我想要在卸载程序中使用的东西。我还需要一种方法来获取每个用户的用户名和域并对它们进行迭代。
我更喜欢使用 cmd
或 powershell
来实现这个问题。