当我以管理员身份运行可执行文件时,为什么会调用我的 Windows shell 扩展?

发布于 2025-01-10 01:01:45 字数 771 浏览 0 评论 0原文

我正在开发一个与 Windows 10 文件资源管理器集成的项目,以允许用户在我们的程序中打开选定的文件。我制作的 shell 扩展在大多数情况下都工作正常,但我遇到的问题是,当我右键单击一个在我的开始菜单结果中执行可执行文件,然后单击“以管理员身份运行”。据我所知,我的代码中唯一可以确认我的扩展在调用时应该实际运行的点是 DllGetClassObject(...) 通过检查 rclsid 和我的扩展的 GUID 是否相等。

对于 shell 扩展的基本设置,我遵循了这个视频系列 。视频中的示例扩展名仅针对文本文件出现,但我更改了我的扩展名以适用于所有文件类型。

有谁知道这个问题可能来自哪里?以下是我的代码的相关部分: https://gist.github.com/caevrobe/2865b5f472d668352a7a91fb5c66953a

I'm working on a project that integrates with the Windows 10 file explorer to allow users to open selected files in our program. The shell extension I made works fine for the most part, but the problem I'm having is that my extension's IShellExtInit::Initialize(...) and IContextMenu::InvokeCommand(...) are being invoked when I right click an executable in my start menu results and click "Run as administrator". As far as I can tell, the only point in my code where I can confirm that my extension should actually be running when it is invoked is in DllGetClassObject(...) by checking that rclsid and my extension's GUID are equal.

For the basic setup of the shell extension, I followed this video series. The example extension in the videos only appeared for text files, but I changed mine to work on all file types.

Does anyone have any idea where this problem could be coming from? Here are the relevant parts of my code: https://gist.github.com/caevrobe/2865b5f472d668352a7a91fb5c66953a

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清君侧 2025-01-17 01:01:45

我找到了此问题的解决方案 这里。我的修复方法是,如果 IContextMenu::InvokeCommand(...) 中的 pici->lpVerb != NULL,则返回 E_INVALIDARG。当调用“以管理员身份运行”时,pici->lpVerb 为“runas”。当正常通过上下文菜单使用我的扩展时,它为空。

HRESULT MyContextMenuHandler::InvokeCommand(LPCMINVOKECOMMANDINFO pici) {
    if (pici->lpVerb != NULL)
        return E_INVALIDARG;
    // rest of your code...
}

如果其他人也遇到同样的问题,我会保留这个问题。

I found a solution to this issue here. My fix was to return E_INVALIDARG if pici->lpVerb != NULL in my IContextMenu::InvokeCommand(...). When invoking "Run as administrator" pici->lpVerb was "runas". When using my extension through the context menu normally, it was null.

HRESULT MyContextMenuHandler::InvokeCommand(LPCMINVOKECOMMANDINFO pici) {
    if (pici->lpVerb != NULL)
        return E_INVALIDARG;
    // rest of your code...
}

I'll leave the question up in case anyone else has the same issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文