|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|||||||||||
Функция QueryFullProcessImageName врёт и возвращает неправильный, уже не существующий, путь к исполняемому файлу21.04.2023, 13:30. Показов 7242. Ответов 80
Метки нет (Все метки)
Столкнулся сегодня с небывалом чудом. Функция QueryFullProcessImageName врёт и возвращает не правду, наглую ложь и враньё. Позор Microsoft'у! Я такого от Microsoft'а не ожидал, честно! Баг майкрософта!!!
Всё началось с того, что я решил написать простенькую функцию AppPath для получения пути к своему исполняемому файлу с учётом уникодных символов, с китайскими иероглифами или другими сложными уникодными символами, в пути, в именах папок. Конечно стандартный App.Path нам такого не вернёт, но в стандартном App.Path хотя бы не врёт с получением правильного пути. Хоть и не поддерживает уникод. Итак сначала я создал новый проект: Форма:
Переименовал свою папку с программой в "App.Path с китайскими иероглифами 拷贝" для теста, как будет работать функция. Запустил EXE и первый раз функция сработала правильно! Потом переименовал папку в другое имя, для проверки. Переименовал в "App.Path с китайскими иероглифами ñ" и решил проверить, в результате получил в пути старое имя папки! Майкрософтовская функция QueryFullProcessImageName даже и не подумала обновить путь к EXE-файлу! Ладно, подумал может это лёгкий баг и нужно просто перезапустить программу заного. Полностью закрыл, потом открыл программу снова! И то же самое! Опять старый путь с китайскими символами!!!! Я был в шоке! Потом 10 раз закрывал и перезапускал и всё так же старая папка с китайщиной. И самое смешное то, что стандартный App.Path правильно меняет путь и китайских символов в пути уже нет, НО конечно не поддерживает букву n диакритическую с тильдой сверху буквы. Вопрос почему функция майкрософта такая ерундовая!? И как правильно получать путь в уникоде чтобы небыло этой ерунды со старыми путями, после переименовывания папок...
1
|
|||||||||||
| 21.04.2023, 13:30 | |
|
Ответы с готовыми решениями:
80
Путь к исполняемому файлу Путь к исполняемому файлу |
| 17.12.2024, 12:12 | |
|
Может и не быстрее, все зависит от ситуации, где чего и сколько надо искать. Я раньше коллекцию сравнивал с dictionary и на больших количествах строк она получалась быстрее, большое значение имеет добавление строк не в порядке сортировки, а как-нибудь рандомно.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
| 18.12.2024, 03:08 [ТС] | ||||||
Сообщение было отмечено mik-a-el как решение
Решение
1
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
| 19.12.2024, 21:28 [ТС] | ||||||
|
Написал новую версию, совместимую с Windows XP, в предыдущей версии я забыл добавить совместимость с XP. А так же стало быстрее работать и в семёрке.
Новый модуль для корректного определения полных путей процессов, во всех версиях Windows:
0
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
| 19.12.2024, 21:29 [ТС] | ||||||
|
Код формы:
0
|
||||||
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 11:38 | |
|
Это довольно старый тред, извеняюсь за bump
Наткнулся случайно, ибо сам некоторое время назад решал задачу получения пути к текущему исполняемому файлу По моим тестам и наблюдениям GetModuleFileNameExW (K32GetModuleFileNameExW) - делает то что нужно; на ней я и остановился А здесь читаю о том что она якобы только 32 битных программ, как говорит HackerVlad. Но... это ведь не так? Или я что-то упускаю
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 04.11.2026, 11:58 [ТС] | |
|
_N_S_, вы можете использовать GetModuleFileNameExW если будете вызывать эту функцию из своего 64-битного процесса то будет работать конечно. Но VB6 компилирует только 32-битные процесы, поэтому я так и писал, что GetModuleFileNameExW только для 32-битных процессов.
Можете попробовать вызвать из VBA или TwinBasic из 64-битного процесса там будет GetModuleFileNameExW работать. Модуль который там я выше написал не адаптирован под VBA/TwinBasic там чисто на VB6 ориентирован.
1
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 12:06 | |
|
HackerVlad, А, понял, вопросов нет, ок. Благодарю за разъяснение
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 04.11.2026, 12:09 [ТС] | |
|
_N_S_, а вы на чём пишете?
0
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 12:11 | |
|
HackerVlad, Плюсы.
Если интересно, вот репо с моим Wrapper-ом над K32GetModuleFileNameExW https://github.com/NsPro04/GetModuleFileName
1
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 04.11.2026, 12:29 [ТС] | |
|
_N_S_, думаю для сишников это будет полезно)))
Добавлено через 11 минут Кстати читая структуру PEB, код который я писал, там регистр символов может не совпадать, особенно для explorer.exe. У меня, например, в файловой системе, имя файла "explorer.exe", а выдаёт "Explorer.EXE". Там этот код можно было бы ещё довести до ума, докрутить, чтобы регистр выправляло правильно, как в файловой системе, чтобы показывало. Но я не стал уже почему-то...
0
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 13:22 | |
|
HackerVlad, а точно нужно читать в ручную PEB, ради доступа к CommandLine через ProcessParameters? Разве GetModuleFileNameW (не ex версия) не делает тоже самое?
Добавлено через 5 минут А, тьфу, она только для текущего процесса. Идиот, извиняюсь Добавлено через 1 минуту Вообще по поводу получения путей у mcafee интересная статья с deep dive в детали https://www.mcafee.com/blogs/o... on-bypass/ Добавлено через 4 минуты Если вкратце, способа получить реальный текущий путь - нет. Ситуацию когда во время работы exe переместили в другую директорию, а затем эту директорию(куда перенесли) переименовали - не обработать никак /dir1/test.exe -> /dir2/test.exe -> (rename) -> /dir3/test.exe все доступные способы будут в лучшем случае говорить что test.exe находится по пути /dir2/test.exe
1
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 04.11.2026, 14:31 [ТС] | |
|
_N_S_, очень полезная информация, спасибо большое)))
Добавлено через 14 минут Там сказано, что функция GetMappedFileNameW так же будет возвращать правду, а не ложь, надо будет проверить
0
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 15:02 | |
|
HackerVlad, не не не, к Mapped даже не прикасайся
Оно вообще не работает На длинных путях падает с ошибкой на сколько помню А в случае если используется hard-link на исполняемый файл то возвращается путь к.. я не знаю, видимо 1 из хардлинков (скрин) В общем чушь полная
1
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 15:10 | |
|
Наиболее близкий к истине результат (at least on win10/11) даёт QueryFullProcessImageNameW с флагом 0 и K32GetModuleFileNameExW
Эти 2 метода получения пути корректно обрабатывают как переименование файла, так и его перемещение во время работы (скрин 1, 2)
1
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 04.11.2026, 17:08 [ТС] | |
|
_N_S_, а ты попробуй на винде меньше чем 10
0
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 17:33 | |
|
HackerVlad, к сожалению нет под рукой, да и честно говоря не особо интересно, ибо пишу только под >= win10
Но судя по табличке которую привели в mcafee - дела печальны
1
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 04.11.2026, 17:35 [ТС] | |
|
_N_S_, да, именно поэтому я и писал код, который читает структуру PEB для того чтобы выдирать правильные пути к EXE
0
|
|
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 17:39 | |
|
HackerVlad, нет, что значит правильные
Разве твой подход через чтение peb, позволяет узнавать актуальный путь при перенесении exe во время работы в другую директорию?
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 04.11.2026, 17:42 [ТС] | ||
|
там замут был другой немного читать оглавление моей темы надо чтобы вникнуть
0
|
||
|
5 / 5 / 0
Регистрация: 16.10.2025
Сообщений: 9
|
|
| 04.11.2026, 17:49 | |
|
А, ну да, я опять хотел отослаться к GetModuleFileNameExW - забыв что вы не можете её использовать
Добавлено через 1 минуту Хендлер на файл да держится, но перемещать и переименовывать его можно Добавлено через 55 секунд Сразу скажу - добраться до хенделра который держит система, в userMode, нельзя. Добавлено через 2 минуты Да, чтож, видимо твой подход единственно возможный в случае сборки под 32 бита - если GetModuleFileNameExW нельзя, а QueryFullProcessImageName возвращает (по какой-то причине) что-то не то
0
|
|
| 04.11.2026, 17:49 | |
|
Получить путь к исполняемому файлу
Как узнать путь к исполняемому файлу? Получить путь к исполняемому bat файлу Получить путь к исполняемому файлу службы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|