Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Windows:按应用程序名称或标识符获取exe的路径?_C++_Windows_Winapi - Fatal编程技术网

C++ Windows:按应用程序名称或标识符获取exe的路径?

C++ Windows:按应用程序名称或标识符获取exe的路径?,c++,windows,winapi,C++,Windows,Winapi,在macOS中,可以使用NSWorkspace的absolutePathForAppBundleWithiIdentifier方法,通过应用程序包ID获取应用程序的完整路径。Windows是否有类似的API,允许使用文件名获取可执行文件的完整路径,而无需搜索文件系统,或者使用其他类型的标识符?没有全局应用程序数据库可以查询所有已安装的应用程序。我假设UWP/Store应用程序在某处注册,但经典应用程序不必这样做 有些应用程序在注册表中的下注册 应用程序路径下的条目主要用于以下目的: •将应用程序

在macOS中,可以使用
NSWorkspace
absolutePathForAppBundleWithiIdentifier
方法,通过应用程序包ID获取应用程序的完整路径。Windows是否有类似的API,允许使用文件名获取可执行文件的完整路径,而无需搜索文件系统,或者使用其他类型的标识符?

没有全局应用程序数据库可以查询所有已安装的应用程序。我假设UWP/Store应用程序在某处注册,但经典应用程序不必这样做

有些应用程序在注册表中的下注册

应用程序路径下的条目主要用于以下目的:

•将应用程序的可执行文件名映射到该文件的完全限定路径

•在每个应用程序、每个进程的基础上,将信息预先挂起到PATH环境变量


并不是所有的申请都在那里注册。您可能还需要搜索%Path%中列出的目录。

没有全局应用程序数据库可以查询所有已安装的应用程序。我假设UWP/Store应用程序在某处注册,但经典应用程序不必这样做

有些应用程序在注册表中的下注册

应用程序路径下的条目主要用于以下目的:

•将应用程序的可执行文件名映射到该文件的完全限定路径

•在每个应用程序、每个进程的基础上,将信息预先挂起到PATH环境变量


并不是所有的申请都在那里注册。您可能还需要搜索%Path%中列出的目录。

Windows没有任何“捆绑包”的概念,因此您的问题在该环境中没有多大意义-您到底想做什么?我希望在给定可执行文件名的情况下获得可执行文件的完整路径,而无需对文件系统进行完全搜索。例如,使用字符串
SomeApp.exe
获取
C:\ProgramFiles\SomeApp\SomeApp.exe
。或者,如果Windows提供了另一种更好的方法来识别我可以使用的特定应用程序,而不是文件名,那就更好了,尽管据我所知,它没有类似的东西。(我编辑了我的问题以澄清这些要点。)从何处获取可执行文件的完整路径?也就是说,是什么节目?@NeilButterworth:那是不正确的。UWP应用程序确实具有应用程序标识,并且作为捆绑包进行部署、管理和维护。在UWP之前,.Windows没有任何“捆绑包”的概念,因此您的问题在该环境中没有多大意义-您到底想做什么?我希望在给定可执行文件名的情况下获得可执行文件的完整路径,而无需对文件系统进行完整搜索。例如,使用字符串
SomeApp.exe
获取
C:\ProgramFiles\SomeApp\SomeApp.exe
。或者,如果Windows提供了另一种更好的方法来识别我可以使用的特定应用程序,而不是文件名,那就更好了,尽管据我所知,它没有类似的东西。(我编辑了我的问题以澄清这些要点。)从何处获取可执行文件的完整路径?也就是说,是什么节目?@NeilButterworth:那是不正确的。UWP应用程序确实具有应用程序标识,并且作为捆绑包进行部署、管理和维护。在UWP之前,.实现为EXE的COM对象服务器可以通过其CLSID标识符在注册表中找到其完整路径,通常在
HKCR\CLSID\\LocalServer(32)
值中,或者
键可能具有映射到
HKCR\
键的ProgID,或者映射到
HKCR\AppID\
键的AppID,其中任何一个都可能有EXE文件路径。应用程序还可以使用默认动词(通常为“打开”)和命令模板将可执行文件名称注册为ProgId。在这种情况下,您可以通过
AssocQueryStringW(ASSOCF|u INIT_BYEXENAME,ASSOCSTR_executable,szExecutableName,NULL,szPath,pcchPath)
查询可执行路径。如果您知道应用程序友好名称,默认应用程序的中央注册表位于“[HKLM | HKCU]\Software\RegisteredApplications”下。每个值都有应用程序的“功能”键相对于配置单元根(即HKLM或HKCU)的路径,您可以在其中找到“ApplicationName”值以及将文件扩展名和协议映射到ProgID的文件关联和URL关联的可能子键。您可以通过
AssocQueryStringW(ASSOCF_INIT_IGNOREUNKNOWN,ASSOCSTR_executable,szProgId,NULL,szPath,pcchPath)获取ProgId的可执行路径。
实现为EXE的COM对象服务器可以通过其CLSID标识符在注册表中找到其完整路径,通常在
HKCR\CLSID\\LocalServer(32)
值中,或者,
键可能有一个映射到
HKCR\
键的ProgID,或者一个映射到
HKCR\AppID\
键的AppID,其中任何一个都可能有EXE文件路径。应用程序还可以使用默认动词(通常为“打开”)和命令模板将可执行文件名注册为ProgID。在这种情况下,您可以通过
AssocQueryStringW(ASSOCF|u INIT_BYEXENAME,ASSOCSTR_executable,szExecutableName,NULL,szPath,pcchPath)
查询可执行路径。如果您知道应用程序友好名称,默认应用程序的中央注册表位于“[HKLM | HKCU]\Software\RegisteredApplications”下。每个值都有应用程序的“功能”键相对于配置单元根(即HKLM或HKCU)的路径,您可以在其中找到“ApplicationName”值以及将文件扩展名和协议映射到ProgID的文件关联和URL关联的可能子键。您可以通过
AssocQueryStringW(ASSOCF_INIT_IGNOREUNKNOWN,ASSOCSTR_executable,szProgId,NULL,s)获取ProgId的可执行路径