1

我有一个 BHO,它在第一次运行时正在收集激活信息并将其存储在注册表中。

(我认为)由于 IE 的许可,我只能将其存储在注册表分支中

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\InternetRegistry\REGISTRY\USER\S-0-0-00-000000000-000000000-000000000-0000\Software\MyBHO\MyKey

其中 S-0-0-00-000000000-000000000-000000000-0000 是每个用户的唯一密钥。

RegCreateKey()使用with很好"Software\MyBHO\MyKey"。这一切都是创建和运行的可爱。它可以毫无问题地确定在空间中存储密钥的位置。

问题:

当我执行卸载时,我想删除这个密钥,因为它是在 IE 之外运行的,所以我无法确定该密钥在哪里/用户字符串是什么。

我想到的选项:

选项 1(理想)首先找出此用户字符串,然后为我希望删除的密钥构建一个新路径并将其删除。如何?

选项 2 在激活点将密钥的路径存储在另一个可以访问的注册表值中。然后读取并删除两者(这似乎有点倒退,并且可能由于注册表上 BHO 的访问限制而无法工作(因此首先将其写入那里))

您是否知道是否有任何方法可以找到此用户密钥,甚至如何找到父目录。

编辑经过继续研究,我发现我所说的“用户密钥”是当前用户的“SID”。也许这会给我带来更好的结果。

4

2 回答 2

1

调用GetUserName以获取用户名,并LookupAccountName获取他的 SID。

ConvertSidToStringSid是将 SID 格式化为S-1-5-32-00000000-00000000-00000000-00000000-0000字符串的有用实用程序函数

于 2012-07-12T18:31:00.673 回答
0

如果您真的想将每个用户的数据写入注册表,请使用IEGetWriteableHKCU()

一般来说,在卸载时没有删除每个用户数据的好方法。例如,如果您以用户 A 的身份安装并以用户 B 的身份卸载会怎样?你要去找所有的并删除它们吗?把粪便留在后面。

或者,您可以考虑使用不同的数据存储。你真的需要注册表吗?您可以将这些数据存储在文件中吗?网络存储呢?

于 2012-07-12T23:25:06.203 回答