2010-10-22 27 views

回答

28

您可以通過GetModuleFileName功能做到這一點。

TCHAR szFileName[MAX_PATH + 1]; 

GetModuleFileName(NULL, szFileName, MAX_PATH + 1) 
+0

就是這樣。我知道這很簡單。 – 2010-10-22 21:02:25

3

GetCurrentProcess,然後 QueryFullProcessImageName

其他的答案是自己的進程更好 - 這適用於遠程的。每the docs

要檢索 當前進程的模塊名稱,使用 GetModuleFileName函數與NULL 模塊句柄。這比 更有效 比 GetProcessImageFileName函數具有 處理當前進程。

要檢索主 可執行模塊的名稱爲在Win32路徑格式遠程進程 ,使用 QueryFullProcessImageName功能。

1

UPDATE:僅適用於控制檯應用程序!

該程序的路徑作爲第一個參數傳遞,它存儲在argv[0]main(argc, argv[])函數中。

+5

不,它不。 Windows將未經修改的參數字符串作爲第二個參數傳遞給CreateProcess。它可以包含任何東西。如果只有1個字符串被傳遞給CreateProcess,那麼它會在argv [0]中查找exe的路徑 - 但是路徑不必是任何方式的規範 - 只需滿足SearchPath函數。它當然是一個約定,但是不能保證argv [0]包含任何可以遠程使用的東西。 – 2010-10-22 21:07:46

+1

這就是我的想法,但我的WinMain函數的簽名爲int APIENTRY _tWinMain(HINSTANCE的hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,INT的nCmdShow) – 2010-10-22 21:10:27

+0

除如果三個POSIX的一個調用EXECL,execle或execlp來啓動程序,你處於讓exec調用argv [0]中的值的程序的擺佈。 – 2010-10-22 21:16:40

0

測試:

int _tmain(int argc, _TCHAR *argv[]) 
{ 
    _tprintf(L"%s", argv[0]); 
    return 0; 
} 

打印完整路徑。

+1

這不適用於GUI應用程序(使用WinMain) – 2011-10-31 22:45:25

+0

正確。 @加雷特的解決方案適用於此。 – egrunin 2011-10-31 23:10:22

相關問題