Изнутри моего MFC App, что я делаю что-то вродеЕсли порядок поиска путей будет идентичным для :: ShellExecute и static CFile :: GetStatus() относительно относительного пути .EXE name?
CFileStatus fs;
if (CFile::GetStatus("MyOtherProg.exe", fs))
{
// found the file
::ShellExecute(NULL, NULL, "MyOtherProg.exe", NULL, NULL, SW_SHOW);
}
, но полный путь к файлу найден в статическом CFile :: GetStatus это НЕ один выполняется с помощью :: ShellExecute (он имеет то же самое имя, но работает другая версия «MyOtherProg.exe» в другой папке).
Я пробовал это на разных ПК с тем же O/S (Win7 64 бит) с различными наборами «MyOtherProg.exe» в разных папках. Ни ShellExecute компьютера не работает так же, как в CFile :: GetStatus. На одном ПК всегда заканчивается версия 3, другой ПК всегда заканчивается версией 2 (почему это не так?).
Примечание 1: На двух ПК установлено «не установлено» не менее 3 версий, но в PATH НЕ установлены. Некоторые из них имеют SHORTCUTS на рабочем столе, если это некоторая недокументированная функция.
Примечание 2: ВСЕ они разные версии «MyOtherProg.exe», но установлены в разных каталогах.
Примечание 3: Полный путь к тому, который запускается через :: ShellExecute, тот же, который был найден, когда я просто набираю «MyOtherProg.exe» в поле «Поиск» в меню «СТАРТ» панели задач. Но ПОЧЕМУ - это тот, который найден CFile :: GetStatus NOT SAME? И почему на одном ПК это версия 2, но на другом ПК его версия 3?
Примечание 4: На обоих компьютерах в результирующем списке поиска команды RUN «MyOtherProg.exe» отображается только одна версия (хотя на одном ПК установлены 3 версии, а на другом ПК установлены 4 разных версии с пятый - «отладочная» сборка). ПК с 3 версиями всегда ТОЛЬКО перечисляет версию 2, ПК с 5 версиями всегда ТОЛЬКО перечисляет версию 3.
'CFile :: GetStatus()' не ищет путь, а расширяет поставляемый путь к файлу с помощью 'GetFullPathName()', который просто добавляет путь к текущему рабочему каталогу и диску (при необходимости). Результирующий путь может быть или не существовать. Если вам нужно найти файл на пути, используйте «SearchPath», затем используйте полный путь. – William
Должны ли они * быть * одинаковыми или нет, это немного нулевой вопрос, так как вы обнаружили, что они, очевидно, нет. Единственное, что вы можете сделать, чтобы убедиться, что вы получите один и тот же exe в каждом случае, - это сначала разрешить путь, как указал @William. –