当前位置:  开发笔记 > 开发工具 > 正文

如何在WindowsC++/CLI中获取应用程序可执行文件名?

如何解决《如何在WindowsC++/CLI中获取应用程序可执行文件名?》经验,为你挑选了3个好方法。

我需要根据可执行文件名更改应用程序的功能.没什么大不了的,只是更改显示的字符串和一些内部标识符.该应用程序是由本机和.Net C++ - CLI代码混合编写的.

我看过的两种方法是在Win32中解析GetCommandLine()函数,并在.Net中填充AppDomain和其他东西.但是,使用GetCommandLine并不总是有效,因为从调试器运行时命令行为空.而.Net AppDomain的东西似乎需要大量的东西.

那么在C++/CLI中确定可执行文件名称的最好/最简单/最有效的方法是什么?(我有点希望我错过了.Net中可用的简单内容.)

编辑:我应该提到的一件事是,这是一个使用C++/CLI的Windows GUI应用程序,因此无法访问传统的C风格主函数,它使用Windows WinMain()函数.



1> Ferruccio..:

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

注意:如果没有main,你可以使用argv [0]参数来主或调用GetCommandLine().但是,请记住,这些方法不一定会为您提供可执行文件的完整路径.它们将返回用于启动程序的相同字符串.调用GetModuleFileName()将始终为您提供完整的路径和文件名.



2> Adam Pierce..:

Ferruccio的答案很好.这是一些示例代码:

TCHAR exepath[MAX_PATH+1];

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

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


从msdn:`如果函数失败,返回值为0(零)`所以是的...你可能想在条件语句中使用`==`而不是`!=`

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;
}

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

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有