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

8 浏览
0 Comments

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

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

我已经尝试了两种方法,一种是在Win32中解析GetCommandLine()函数,另一种是在.NET中处理AppDomain和其他东西。然而,使用GetCommandLine并不总是有效,因为在调试器中运行时命令行为空。而且.NET的AppDomain似乎需要很多处理。

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

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

0
0 Comments

问题的原因是想要获取在Windows C++/CLI中应用程序的可执行文件名。通常情况下,可以使用`argv[0]`参数或者调用`GetCommandLine()`函数来获取可执行文件名。但是,这些方法并不一定会返回完整的可执行文件路径和文件名,而只是返回启动程序时使用的相同字符串。因此,可以使用`GetModuleFileName()`函数来获取完整的可执行文件路径和文件名。

解决方法是使用`GetModuleFileName()`函数,并将其参数设置为0作为模块句柄。这样,函数将返回当前进程的可执行文件路径和文件名。

下面是使用`GetModuleFileName()`函数获取应用程序可执行文件名的示例代码:

#include 
#include 
int main()
{
    char exeName[MAX_PATH];
    GetModuleFileName(NULL, exeName, MAX_PATH);
    std::cout << "Executable Name: " << exeName << std::endl;
    return 0;
}

使用这段代码,将会输出当前应用程序的可执行文件名。

0
0 Comments

问题的出现原因:用户想要在Windows的C++/CLI应用程序中获取可执行文件的名称。

解决方法:使用argv参数来获取main函数的参数。代码如下:

int main(int argc, char* argv[])
{
    printf("%s\n", argv[0]);  //argv[0]包含应用程序的名称。
    return 0;
}

需要注意的是,可能需要对字符串进行处理以去除目录信息和/或扩展名,但是应用程序的名称会在argv参数中。

这个解决方法的优点是可以跨平台使用。

不过,有用户指出在某些情况下这种方法可能无效。例如,只在命令提示符中输入工具名称(忽略.exe扩展名)。

0
0 Comments

问题的原因是需要在Windows的C++/CLI中获取应用程序的可执行文件名,并且需要解决以下问题:当GetModuleFileName函数失败时,应该使用等于号(==)而不是不等于号(!=)来判断。

解决方法是使用GetModuleFileName函数来获取应用程序的可执行文件名,并在函数失败时使用等于号(==)进行判断。

下面是一个示例代码:

TCHAR exepath[MAX_PATH+1];
if(0 == GetModuleFileName(0, exepath, MAX_PATH+1))
    MessageBox(_T("Error!"));
MessageBox(exepath, _T("My executable name"));

根据msdn文档的描述,当GetModuleFileName函数失败时,返回值为0,因此在条件语句中应该使用等于号(==)而不是不等于号(!=)。

以上就是解决在Windows的C++/CLI中获取应用程序的可执行文件名问题的方法。

0