2011-01-15 3 views
0

Возможные Дубликаты:
Win32: Find what directory the running process EXE is stored in
How to get the application executable name in Windows (C++ Win32 or C++/CLI)?GetCurrentDirectory для запуска. C++

привет, я хочу, чтобы мое приложение работать на statup, он использует некоторые файлы в том же directory.it работает хорошо но когда он запускается при запуске, GetCurrentDirectory является «c: \ Documents and Settings \ User» .. но я хочу фактический путь к файлу exe. Как я могу получить его на C++. , пожалуйста, помогите мне. спасибо.

+0

Можете ли вы перефразировать себя? Какова ваша проблема? И что именно вы хотите? 'GetCurrectDirectory()' должен предоставить вам текущий каталог, который, я думаю, вы хотите! – Nawaz

+0

Я думаю, что вы не могли понять мою очередь. ну ... GetCurrectDirectory() дает правильный текущий каталог, но когда программа запускается при запуске, значение GetCurrectDirectory() - это «c: \ Documents and Settings \ User \» для меня. Я хочу узнать еще один способ найти исполняемый файл executalbe путь к каталогу. – YAHOOOOO

+0

спасибо İsmail 'cartman' Dönmez, – YAHOOOOO

ответ

3

Попробуйте использовать GetModuleFileName или GetModuleFileNameEx.

ли это:

wchar_t exeDirectory[1024]; //to store the directory 
DWORD ret = GetModuleFileName(NULL, exeDirectory, 1024); 
if (ret) 
{ 
    /*the path to your EXE is stored in the variable "exeDirectory" - use it */ 
} 

Примечание Я передаю NULL в качестве первого аргумента, потому что MSDN говорит,

«Если этот параметр равен NULL, GetModuleFileName извлекает путь исполняемого файл текущего процесса. "

Это то, что вы хотите. Правильно?

+0

спасибо, его работа ... но если я делаю GetModuleFileName (NULL, exeDirectory, 1024), он работает хорошо. Также, какая уместность hModule = GetModuleHandle (NULL). – YAHOOOOO

+0

Это хорошо. Фактически MSDN говорит: «Если этот параметр имеет значение NULL, GetModuleFileName возвращает путь к исполняемому файлу текущего процесса.» * ... это означает, что мне не нужно использовать GetModuleHandle(). Позвольте мне удалить его из кода! – Nawaz

-1

Использование ARGV может быть:

int main(int argc, char* argv[]) 
{ 
    // argv[0] is the path to binary file you're running 
    // ... 
    return 0; 
} 

Прибыль является то, что этот метод не зависит от платформы и не имеет потребности в каких-либо системных вызовов.

+0

не точно, он дает команду, выдаваемую в командной строке, или, более конкретно, вызов exec() или его эквивалент Windows. Это не обязательно (обязательно) абсолютный путь к исполняемому файлу. Вы должны иметь возможность получить абсолютный путь, объединив текущий рабочий каталог и argv [0], хотя, если он не является абсолютным каталогом. Но тогда получение текущего рабочего каталога не может быть реализовано платформой независимо и более трудной проверкой, если argv [0] является абсолютным путем, также зависит от платформы. – wich

Смежные вопросы