可能重複:
How to get the application executable name in Windows (C++ Win32 or C++/CLI)?如何從本地win32 C++應用程序獲取當前實例的可執行文件名?
如何從我的本地Win32 C++應用程序中獲取當前實例的文件名&路徑?
例如;如果我的應用程序是 C:\項目\ testapps \ getapppath.exe 它能夠告訴路徑是 C:\項目\ testapps \ getapppath.exe
可能重複:
How to get the application executable name in Windows (C++ Win32 or C++/CLI)?如何從本地win32 C++應用程序獲取當前實例的可執行文件名?
如何從我的本地Win32 C++應用程序中獲取當前實例的文件名&路徑?
例如;如果我的應用程序是 C:\項目\ testapps \ getapppath.exe 它能夠告訴路徑是 C:\項目\ testapps \ getapppath.exe
您可以通過GetModuleFileName功能做到這一點。
TCHAR szFileName[MAX_PATH + 1];
GetModuleFileName(NULL, szFileName, MAX_PATH + 1)
GetCurrentProcess,然後
QueryFullProcessImageName
其他的答案是自己的進程更好 - 這適用於遠程的。每the docs:
要檢索 當前進程的模塊名稱,使用 GetModuleFileName函數與NULL 模塊句柄。這比 更有效 比 GetProcessImageFileName函數具有 處理當前進程。
要檢索主 可執行模塊的名稱爲在Win32路徑格式遠程進程 ,使用 QueryFullProcessImageName功能。
UPDATE:僅適用於控制檯應用程序!
該程序的路徑作爲第一個參數傳遞,它存儲在argv[0]
的main(argc, argv[])
函數中。
不,它不。 Windows將未經修改的參數字符串作爲第二個參數傳遞給CreateProcess。它可以包含任何東西。如果只有1個字符串被傳遞給CreateProcess,那麼它會在argv [0]中查找exe的路徑 - 但是路徑不必是任何方式的規範 - 只需滿足SearchPath函數。它當然是一個約定,但是不能保證argv [0]包含任何可以遠程使用的東西。 – 2010-10-22 21:07:46
這就是我的想法,但我的WinMain函數的簽名爲int APIENTRY _tWinMain(HINSTANCE的hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,INT的nCmdShow) – 2010-10-22 21:10:27
除如果三個POSIX的一個調用EXECL,execle或execlp來啓動程序,你處於讓exec調用argv [0]中的值的程序的擺佈。 – 2010-10-22 21:16:40
測試:
int _tmain(int argc, _TCHAR *argv[])
{
_tprintf(L"%s", argv[0]);
return 0;
}
打印完整路徑。
這不適用於GUI應用程序(使用WinMain) – 2011-10-31 22:45:25
正確。 @加雷特的解決方案適用於此。 – egrunin 2011-10-31 23:10:22
就是這樣。我知道這很簡單。 – 2010-10-22 21:02:25