Как я могу программно найти, где находится iexplore.exe? - PullRequest
5 голосов
/ 28 апреля 2011

Мне нужно запустить myApp.exe, который, в свою очередь, запустит iexplore.exe. Какой самый надежный, общий способ (независимый от версии ОС) сделать это?

Можете ли вы указать мне правильный ключ реестра / env var / other для этого?

Спасибо, Guy

Ответы [ 7 ]

3 голосов
/ 28 апреля 2011
#include <stdlib.h>  
int main() {     
    system("iexplore.exe");
    return 0; 
} 

в любой версии Windows, которую я когда-либо пробовал ... если вы нажмете кнопку run, введите iexplore.exe, Internet Explorer запустится.Это должно сделать то же самое ...

3 голосов
/ 28 апреля 2011

В более новых версиях 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% \ InternetExplorer \ iexplore.exe

Обратите внимание, что 64-разрядные версии Windows могут иметь две разные версии IE: 32-разрядную и 64-разрядную.По крайней мере, так как сейчас (с IE9), вы обычно хотели бы использовать 32-битную версию, так как она лучше оптимизирована и имеет лучшую совместимость с плагинами / ActiveX.

1 голос
/ 29 апреля 2011

Правильный способ - использовать %PATH%, поскольку он не подвержен атакам предварительной загрузки.

SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE);
WCAHR buf[MAX_PATH];
SearchPath(NULL, "iexplore.exe", NULL, MAX_PATH, buf, NULL);
1 голос
/ 28 апреля 2011

Считать стандартное значение ключа реестра HKEY_CLASSES_ROOT\CLSID\{0002DF01-0000-0000-C000-000000000046}\LocalServer32

Это регистрация сервера COM COM.

0 голосов
/ 24 апреля 2019

Другая альтернатива:

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")
0 голосов
/ 28 апреля 2011

Если я не ошибаюсь, текущая версия 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");
}
0 голосов
/ 28 апреля 2011

Вы можете просмотреть папки с переменной окружения PATH.Также в папках %SYSTEMDRIVE%\PROGRA~1\INTERN~1 и %SYSTEMDRIVE%\PROGRA~2\INTERN~1.

РЕДАКТИРОВАТЬ:

  • Вы можете иметь свою собственную переменную env (скажем, IE_HOME).И попросите клиентов вашей программы установить его равным пути к исполняемому файлу IE и просто использовать значение этой переменной среды.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...