如何获得在WindowsC ++ / CLI应用程序的可执行文件名称?(How to get the

2019-06-18 04:58发布

我需要改变基于可执行名称的应用程序的功能。 没有巨大的,只是改变所显示的字符串和一些内部标识符。 该应用程序被写入的天然混合物和.Net C ++ - CLI代码。

我已经看了两种方法是分析在Win32中的GetCommandLine()函数和馅与周围的AppDomain中和其他的东西在.NET。 然而,使用GetCommandLine并不总是可行的从调试器的命令行是空的运行时。 和.NET的AppDomain东西好像都需要大量的馅周围。

那么,什么是最好的/简单/最有效的C ++ / CLI确定可执行文件的名称的方式? (我是一种希望,我只是错过了一些简单的可在.NET。)

编辑:有一两件事,我应该提到的是,这是一个使用C ++ / CLI在Windows GUI应用程序,因此也对传统的C风格的主要功能用不上,它使用了Windows的WinMain()函数。

Answer 1:

调用GetModuleFileName() ,使用0作为模块句柄。

注意:您还可以使用的argv [0]参数主要或致电GetCommandLine(),如果没有为主。 但是,请记住,这些方法不一定给你的可执行文件的完整路径。 他们会给回已经用于启动该程序相同的字符的字符串。 调用GetModuleFileName()总是给你一个完整的路径和文件名。



Answer 2:

费鲁乔的回答是好。 下面是一些示例代码:

TCHAR exepath[MAX_PATH+1];

if(0 == GetModuleFileName(0, exepath, MAX_PATH+1))
    MessageBox(_T("Error!"));

MessageBox(exepath, _T("My executable name"));


Answer 3:

使用argv参数main

int main(int argc, char* argv[])
{
    printf("%s\n", argv[0]);  //argv[0] will contain the name of the app.
    return 0;
}

您可能需要扫描字符串以删除目录信息和/或扩展,但名称将在那里。



Answer 4:

使用__argv [0]



Answer 5:

有关于大会的静态方法将得到它为你的.NET。

Assembly.GetEntryAssembly().FullName

编辑:我不知道你想要的文件名......你也可以通过调用:

Assembly.GetEntryAssembly().CodeBase

这将让你的完整路径组件(包括文件名)。



Answer 6:

我可以证实它工作在Win64中/视频工作室2017年/ MFC

TCHAR szFileName[MAX_PATH + 1];
GetModuleFileName(NULL, szFileName, MAX_PATH + 1);
auto exe = CString(szFileName);

exe文件中包含完整路径的exe。



文章来源: How to get the application executable name in WindowsC++/CLI?