【发布时间】:2016-04-14 08:12:30
【问题描述】:
我有一个服务需要将 URL 添加到登录用户的 IE 缓存中
为此,我首先使用OpenProcessToken 获取用户的令牌并调用ImpersonateLoggedOnUser
我尝试使用 2 种方法添加 URL
- 使用IUrlHistoryStg2 COM 接口,并调用AddUrlAndNotify 方法
- 按以下方式使用CommitUrlCacheEntryW
CommitUrlCacheEntryW(urlToEnterWithPrefix, 0, ExpireTime, LastModifiedTime, URLHISTORY_CACHE_ENTRY | NORMAL_CACHE_ENTRY, NULL, 0, NULL, NULL);
当进程在登录用户下运行时,这两种方法都可以正常工作,但在 LocalSystem 下运行时会失败
CommitUrlCacheEntryW 文档统计:
WinINet 不支持服务器实现。此外,它 不应从服务中使用。对于服务器实现或 服务使用 Microsoft Windows HTTP 服务 (WinHTTP)。
但我在WinHTTP 中找不到任何与CommitUrlCacheEntryW 对应的方法
我想就以下问题寻求帮助:
- 我可以使用服务中的IUrlHistoryStg2 来访问登录用户的 url-history 吗?
- 如何使用CommitUrlCacheEntryW 或服务中的更简洁的函数来访问已登录用户的 url-history?
- 是否还有第三个选项我仍然没有使用?
【问题讨论】:
-
3) 在用户登录时运行的桌面应用程序,然后您的服务与之通信。
-
感谢@AlexK。此时我试图避免添加额外的应用程序\进程。你知道这是否可以只用服务来完成吗?
-
那么 Commit 方法已经失效,因为文档告诉您不要这样做,当您使用服务中的接口方法时会发生什么?
-
作为服务运行时,两个:* AddUrlAndNotify * CommitUrlCacheEntryW 产生错误:
This function is not supported on this system
标签: c++ internet-explorer winapi browser-history com-object