【问题标题】:How can I find programatically where iexplore.exe is?如何以编程方式找到 iexplore.exe 的位置?
【发布时间】:2011-04-28 16:13:28
【问题描述】:

我需要运行 myApp.exe,然后它会启动 iexplore.exe。 这样做的最强大、最通用的方式(与操作系统位版本无关)是什么?

你能给我指出正确的注册表项 /env var/other 的意思吗?

谢谢, 伙计

【问题讨论】:

  • 可能是这样的(打开默认浏览器,不一定是IE):stackoverflow.com/questions/2308439/…
  • 好主意,但我只需要 IE 即可启动
  • 当然取决于你在做什么。但是,如果我运行的是 Windows 系统并且在我的默认浏览器设置为其他浏览器时打开了 IE,我会非常恼火。
  • 我明白了。但我真的需要启动 IE 而不是默认的 :)

标签: c++ internet-explorer process


【解决方案1】:

对于较新版本的 Internet Explorer,您可以查看密钥 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Capabilities\ApplicationDescription。

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

在注册表中:HKEY_CLASSES_ROOT\IE.AssocFile.HTM\shell\open\command %ProgramFiles(x86)%\Internet Explorer\iexplore.exe %ProgramFiles%\Internet Explorer\iexplore.exe

请注意,64 位 Windows 版本可能有两个不同版本的 IE:32 位和 64 位。至少现在情况(使用 IE9),您通常希望使用 32 位版本,因为它经过更好的优化并且具有更好的插件/ActiveX 兼容性。

【讨论】:

  • 在注册表中我找到了这个键:HKEY_CLASSES_ROOT\htmlfile\shell\open\command
【解决方案2】:
#include <stdlib.h>  
int main() {     
    system("iexplore.exe");
    return 0; 
} 

在我曾经尝试过的任何版本的 Windows 中...如果单击运行然后键入 iexplore.exe,Internet Explorer 将运行。这应该做同样的事情......

【讨论】:

  • 除非你在当前工作目录中有一个伪造的iexplore.exe。这可能是恶意软件利用的途径。
  • 或者,可能有人故意将 iexplore.exe 替换为 Firefox,因为某些愚蠢的开发人员 thought it would be a good idea to always open IE 而不是默认浏览器。
  • 它如何知道在哪里可以找到 iexplore.exe?
【解决方案3】:

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

这是 IE COM 服务器注册。

【讨论】:

  • 这是错误的。在我的 Windows 8.1 上,该键设置为 "%ProgramFiles(x86)%\Internet Explorer\ielowutil.exe" -CLSID:{0002DF01-0000-0000-C000-000000000046}
【解决方案4】:

另一种选择:

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")

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

    • 我知道很久以前就有人回答了,但是你是怎么做到的呢?当我在 Win 7、8.2、10 上测试它时,它似乎总是返回 0 并将错误代码设置为 ERROR_FILE_NOT_FOUND
    【解决方案6】:

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

    编辑:

    • 您可以拥有自己的环境变量(例如 IE_HOME)。并要求您程序的客户端将其设置为等于 IE 可执行文件的路径,并仅使用此环境变量的值。

    【讨论】:

    • 您不需要查看%PATH% 中的文件夹。如果您只是想运行它并且它位于 %PATH%(默认情况下)中,那么只需运行 iexplore 而无需任何文件夹结构即可,毕竟这就是 %PATH% 的用途。跨度>
    • 说要查看路径文件夹,我的意思就是这个:)(即只执行)。
    • path 环境变量似乎没有包含 iexplore 的目录。
    【解决方案7】:

    除非我弄错了当前版本的 IE 总是安装在“Program Files\InternetExplorer”下

    所以,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 2012-01-25
      • 2010-12-09
      • 2021-03-16
      • 2011-05-05
      • 2016-10-11
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多