2010-10-22 11 views
15

संभव डुप्लिकेट:
How to get the application executable name in Windows (C++ Win32 or C++/CLI)?मैं देशी Win32 C++ ऐप से वर्तमान इंस्टेंस के निष्पादन योग्य फ़ाइल नाम को कैसे प्राप्त कर सकता हूं?

मैं अपने देशी Win32 सी ++ आवेदन के भीतर से वर्तमान उदाहरण के फ़ाइल नाम & पथ मिल सकता है?

उदाहरण के लिए; अगर अपने आवेदन ग था: \ परियोजनाओं \ testapps \ getapppath.exe

उत्तर

28

आप इस GetModuleFileName समारोह के माध्यम से कर सकते हैं: \ परियोजनाओं \ testapps \ getapppath.exe यह पथ बताने के लिए सक्षम हो जाएगा सी है।

TCHAR szFileName[MAX_PATH + 1]; 

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

यही है। मुझे पता था कि यह कुछ आसान था। –

3

GetCurrentProcess, तो QueryFullProcessImageName

अन्य उत्तर अपनी खुद की प्रक्रिया के लिए बेहतर हैं - इस दूरदराज के लोगों के लिए पसंद किया जाता है। the docs प्रति:

मौजूदा प्रक्रिया के मॉड्यूल का नाम पुनः प्राप्त करने के लिए, एक शून्य मॉड्यूल हैंडल GetModuleFileName समारोह का उपयोग करें। वर्तमान प्रक्रिया के लिए एक हैंडल के साथ GetProcessImageFileName फ़ंक्शन को कॉल करने से अधिक कुशल है।

Win32 पथ प्रारूप में एक दूरस्थ प्रक्रिया के लिए मुख्य निष्पादन योग्य मॉड्यूल के नाम को पुनः प्राप्त करने के लिए, QueryFullProcessImageName समारोह का उपयोग करें।

1

अद्यतन: कंसोल अनुप्रयोगों के लिए केवल काम करता है!

प्रोग्राम का पथ पहले तर्क के रूप में पारित किया गया है, यह फ़ंक्शन में argv[0] में संग्रहीत है।

+5

नहीं, ऐसा नहीं है। Windows Unmodified पैरामीटर स्ट्रिंग को CreateProcess के दूसरे पैरामीटर के रूप में पास करता है। इसमें कुछ भी शामिल हो सकता है। अगर केवल 1 स्ट्रिंग को CreateProcess में पास किया गया है, तो यह argv [0] में exe के पथ की तलाश करेगा - लेकिन पथ को किसी भी तरह से कैनोलिक नहीं होना चाहिए - बस SearchPath फ़ंक्शन को संतुष्ट करें। यह निश्चित रूप से एक सम्मेलन है, लेकिन इस बात की कोई गारंटी नहीं है कि argv [0] में कुछ भी दूरस्थ रूप से प्रयोग योग्य है। –

+1

यही वह था जो मैं सोच रहा था, लेकिन मेरा winmain का हस्ताक्षर int APIENTRY _tWinMain (HINSTANCE HIstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) –

+0

सिवाय इसके कि यदि तीन पॉज़िक्स कॉल में से एक प्रोग्राम को शुरू करने के लिए execl, execle या execlp का उपयोग किया गया था, आप उस कार्यक्रम की दया पर हैं जिसने argv [0] में मान के लिए निष्पादन कॉल किया है। –

0

परीक्षण किया गया:

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

प्रिंटों पूर्ण पथ।

+1

यह जीयूआई ऐप्स (WinMain के साथ) –

+0

सच के लिए काम नहीं करता है। @ गेटेट का समाधान उस के लिए काम करता है। – egrunin

संबंधित मुद्दे

 संबंधित मुद्दे