【问题标题】:Get exe name that is currently running (Not the path) [duplicate]获取当前正在运行的 exe 名称(不是路径)[重复]
【发布时间】:2020-10-20 15:09:56
【问题描述】:

嘿,所以我想获取当前正在运行的 exe 的名称 这是我尝试做的事情

#include <iostream>
#include <windows.h>

using namespace std;

int main()
  {
  char filename[ MAX_PATH ];
  DWORD size = GetModuleFileNameA( NULL, filename);
  if (size)
    cout << "EXE file name is: " << filename << "\n";
  else
    cout << "Could not fine EXE file name.\n";
  return 0;
  }

但它也获得了 exe 的路径,但我只需要 exe 名称有什么帮助吗?

【问题讨论】:

  • 在最后一个反斜杠处剪切,只保留后面的东西......?顺便说一句,“我想获取 exe 的路径”和“它获取路径......但我只需要 exe 名称”是互斥/混淆的。
  • 请在问题中包含输出和预期输出。似乎你所要做的就是在之前和包括最后一个 /
  • 从路径中获取名称应该很容易 - stackoverflow.com/questions/1528298/get-path-of-executable
  • 我不想获取路径。只有exe的名称
  • 这是特定于操作系统或实现的。对于 Linux,请参阅 proc(5)一些 C++ 实现甚至没有文件(阅读一些 C++ 标准,例如 n3337 进行检查)。如果你使用Qt 有一种方法......

标签: c++


【解决方案1】:

第一个命令行参数是当前程序的名称

#include <iostream>
#include <string>
#include <windows.h>
#include <algorithm>

int main(int argc, char** argv)
{
    if (argc > 0)
        std::cout << argv[0] << std::endl;
    else {
        //some other method has to be used, use OP's suggestion
        char filename[ MAX_PATH ];
        DWORD size = GetModuleFileNameA( NULL, filename, MAX_PATH);
        if (!size) {
            std::cout << "Could not fine EXE file name.\n";
            return -1;
        }

        //Remove everything before the last "\"
        std::string name = filename;
        auto it = std::find(name.rbegin(), name.rend(), '\\'); //escape the escape character
        if (it != name.rend()) {
            name.erase(name.begin(), it.base());
        }

        std::cout << filename << std::endl;

    }
}

【讨论】:

  • 这是一个非常简单的控制台应用程序解决方案。如果它是 GUI 应用程序,这将不起作用
  • 不能保证argv[0] 是应用程序可执行文件的名称。如果我使用fork() + exec 系列函数中的一个来启动您的程序,我可以让argv[0] 随心所欲。 argv[0] 包含可执行文件名只是一个约定,你不能依赖它。
  • 根据docs.microsoft.com/en-us/cpp/cpp/…,第一个参数是“调用程序的命令”(如果存在)。
  • @Mestkon 见docs.microsoft.com/en-us/cpp/c-runtime-library/reference/… - 你可以随心所欲地制作argv[0]。约定说它应该与程序名称相同,但没有强制执行。在 UNIX 上也一样。
  • 没有一个工作:(
猜你喜欢
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 2016-03-28
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多