БЕЗОПАСНО получить путь к запуску исполняемого файла в Windows API - PullRequest
3 голосов
/ 30 января 2011

Эй, Я пытаюсь получить путь к DLL, расположенной в той же папке, что и мой исполняемый файл. Похоже, что для этого нужно использовать один из QueryFullProcessImageName() или GetModuleFileName(), чтобы получить путь к исполняемому исполняемому файлу, а затем использовать строковые манипуляции, чтобы вместо этого указать путь к необходимой библиотеке.

К сожалению, ни одна из этих двух функций не позволяет заранее определить требуемый размер буфера. Я попытался передать ноль для параметра nSize, но это не дает желаемого эффекта.

Каков наилучший практический способ сделать это?

Ответы [ 2 ]

3 голосов
/ 30 января 2011

На практике вы можете использовать Windows API MAX_PATH в качестве размера буфера, возможно, добавьте 1 для дополнительной безопасности.

Теоретически путь Windows может быть намного больше. Насколько я помню, MAX_PATH равно 270 или около того, в то время как в файловой системе NTFS путь может составлять примерно (примерно) 32767 символов. Однако для такого большого размера он должен обрабатываться как Unicode, и, что важно, Проводник Windows не поддерживает такие большие пути, поэтому на практике это не проблема.

На практике, опять же, если вы когда-нибудь столкнетесь с таким большим путем, который, по-видимому, невозможно удалить, вы можете использовать именование Unicode (есть специальный префикс для длинных путей) и / или эквивалентные короткие имена (имена DOS 8.3 ) и / или определить логические диски для сокращения пути, чтобы можно было удалить каталог / файл.

Приветствия & hth.,

0 голосов
/ 30 января 2011

GetModuleFilename возвращает количество символов, скопированных в ваш буфер.Если он меньше размера вашего буфера, все в порядке.Если он равен размеру вашего буфера, выделите больший буфер и попробуйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...