dll shell 扩展如何知道要执行的程序位置?
How would dll shell extension know the program location to execute?
我现在有一个上下文菜单 shell C++ 扩展 (dll),我想将其与我的重命名程序捆绑在一起。
我的问题是,一旦加载了 dll 并通过上下文菜单调用了 Execute,shell 扩展如何知道要启动的程序的位置?
我将进行 inno 设置以包含我的 shell 扩展程序 (dll)。我的理解是 shell 扩展将处理将选定的文件路径传递给系统上安装的重命名程序。但是 shell 怎么知道要调用程序呢?
问候
Shell 没有 "renaming program" 的概念,那是 Shell 扩展实现的私有细节。如果您的 Shell 扩展正在尝试启动外部程序,您有责任确保您的 Shell 扩展知道在哪里可以找到该程序。
例如,通过让您的 Inno 安装程序提示用户,或者甚至通过您提供单独的配置 UI 以及您的 Shell 扩展,然后将用户的选择保存在注册表中,或在用户个人资料的文件中,您的 Shell 扩展名以后可以在需要时找到的任何地方。
或者,如果相关程序已经在某处存储了自己的安装路径,例如在注册表中,只需让您的 Shell 扩展程序在需要时直接检索该位置即可。
无论哪种方式,您的 Shell 扩展都必须记住传递给其 IShellExtInit::Initialize()
实现的输入文件路径,然后您的 IContextMenu::InvokeCommand()
实现将传递那些确定外部程序所在位置后的外部程序路径。
我现在有一个上下文菜单 shell C++ 扩展 (dll),我想将其与我的重命名程序捆绑在一起。
我的问题是,一旦加载了 dll 并通过上下文菜单调用了 Execute,shell 扩展如何知道要启动的程序的位置?
我将进行 inno 设置以包含我的 shell 扩展程序 (dll)。我的理解是 shell 扩展将处理将选定的文件路径传递给系统上安装的重命名程序。但是 shell 怎么知道要调用程序呢? 问候
Shell 没有 "renaming program" 的概念,那是 Shell 扩展实现的私有细节。如果您的 Shell 扩展正在尝试启动外部程序,您有责任确保您的 Shell 扩展知道在哪里可以找到该程序。
例如,通过让您的 Inno 安装程序提示用户,或者甚至通过您提供单独的配置 UI 以及您的 Shell 扩展,然后将用户的选择保存在注册表中,或在用户个人资料的文件中,您的 Shell 扩展名以后可以在需要时找到的任何地方。
或者,如果相关程序已经在某处存储了自己的安装路径,例如在注册表中,只需让您的 Shell 扩展程序在需要时直接检索该位置即可。
无论哪种方式,您的 Shell 扩展都必须记住传递给其 IShellExtInit::Initialize()
实现的输入文件路径,然后您的 IContextMenu::InvokeCommand()
实现将传递那些确定外部程序所在位置后的外部程序路径。