我如何以编程方式找到iexplorer .exe的位置

How can I find programatically where iexplore.exe is?

本文关键字:iexplorer exe 位置 方式找 编程      更新时间:2023-10-16

我需要运行myApp.exe,然后启动iexplorer .exe。什么是最强大的,通用的方法(操作系统位版本无关)做到这一点?

你能告诉我正确的注册表项/env var/其他方法吗?

谢谢,家伙

对于较新版本的Internet Explorer,您可以查看密钥HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerCapabilitiesApplicationDescription。

话虽如此,最向后和向前兼容的方式将是查看以下路径(按此顺序):

在注册表中:HKEY_CLASSES_ROOTIE.AssocFile.HTMshellopencommand% ProgramFiles (x86) % Internet Explorer iexplore.exe% ProgramFiles % Internet Explorer iexplore.exe

请注意,64位Windows版本可能有两个不同的IE版本:32位和64位。至少就目前的情况(IE9)而言,你通常会想使用32位版本,因为它优化得更好,并且具有更好的插件/ActiveX兼容性。

#include <stdlib.h>  
int main() {     
    system("iexplore.exe");
    return 0; 
} 

在我尝试过的任何版本的windows中…如果您点击运行,然后键入iexplorer .exe, Internet Explorer将运行。

读取注册表项HKEY_CLASSES_ROOTCLSID{0002DF01-0000-0000-C000-000000000046}LocalServer32的标准值

这是IE COM服务器注册。

另一种选择:

CSettingsStore store(TRUE, TRUE);
if (store.Open(_T("Software\Clients\StartMenuInternet\IEXPLORE.EXE\shell\open\command")))
{
    CString strIEPath = _T("");
    store.Read(_T(""), strIEPath);
    store.Close();
    if(PathFileExists(strIEPath))
    {
        // Do whatever
    }
}

您也可以将密钥更改为:

store.Open(_T("SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE")

正确的方法是使用%PATH%,因为它不受预加载攻击。

SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE);
WCHAR buf[MAX_PATH];
SearchPath(NULL, "iexplore.exe", NULL, MAX_PATH, buf, NULL);

可以查看PATH环境变量的文件夹。也在文件夹%SYSTEMDRIVE%PROGRA~1INTERN~1%SYSTEMDRIVE%PROGRA~2INTERN~1

编辑:

    你可以有你自己的羡慕变量(比如IE_HOME)。并要求程序的客户端将其设置为IE可执行文件的路径,并且只使用该环境变量的值。

除非我弄错了,否则当前版本的IE总是安装在"Program FilesInternetExplorer"下

string strIEPath;
char cDirectory[MAX_PATH];
if(SHGetSpecialFolderPathA(NULL,cDirectory,CSIDL_PROGRAM_FILES,false))          
{
    strIEPath = cDirectory;
    strIEPath.append("\InternetExplorer\iexplorer.exe");
}