【问题标题】:Search for path of .exe搜索.exe的路径
【发布时间】:2013-11-07 11:42:58
【问题描述】:

所以我正在寻找一段代码,它允许我搜索正在执行的文件的路径。例如,我正在做一个用于 pendrives 的自动运行程序(示例),但我没有不知道它是否会以 D:、F:、G: 或其他形式结束,因此程序会搜索它自己的路径并使用一些“if”语句根据找到的路径打开另一个文件。

这是我的想法:

    #include <stdlib.h>
    #include <iostream>
    using namespace std;

    int main () {
    // Insert 'search path' code and needed variables here.

    if (-ThePath- == "d:\\AutoRun.exe")
        {
         system ("d:\\MyFolder\\OtherProgram.exe");
        }
    else if (-ThePath- == "f:\\AutoRun.exe")
        {
         system ("f:\\MyFolder\\OtherProgram.exe");
        }
    else if (-ThePath- == "g:\\AutoRun.exe")
        {
         system ("g:\\MyFolder\\OtherProgram.exe");
        }
    else
        {
         cout << "An error ocurred.\n";
         cout << "Press enter to exit...\n";
         cin.get();
        };
    return 0;
    }

有什么办法可以做到吗?

【问题讨论】:

  • 运行这个例子,你会得到惊喜:msdn.microsoft.com/en-us/library/17w5ykft.aspx
  • 较新的 Windows 版本几乎不再支持 AutoRun。从安全角度来看,这太冒险了。
  • @MSalters - 绝对是,AKA AutoMalware。
  • @nik.shornikov 哈,确实令人愉快。谢谢!
  • @MSalters 是的,你是对的,但这只是一个例子。它可能不是 AutoRun,而是一个简单的程序,可以在 pendrive 中打开另一个。

标签: c++ windows path


【解决方案1】:

GetModuleFileName:文档here

已编辑 - Pedro,来自 Microsoft 的示例代码处理了很多事情。要获取文件路径,您只需要:

TCHAR szPath[MAX_PATH];

if( !GetModuleFileName( NULL, szPath, MAX_PATH ) ) {

    // handle error in GetModuleFileName

} else {

    // now, szPath contains file path

};

【讨论】:

  • 不错的代码,虽然乍一看对我来说似乎有点太复杂了。我还是个初学者,学了半年C++。不过我会学习它,以提高自己:P 感谢分享。
  • @PedroPellegrini:不过,这是正确的答案。 WinAPI 确实很烦人,尤其是对于习惯于真正字符串的 C++ 程序员。
  • 嗯,我明白了。谢谢,我去试试。
【解决方案2】:

在标准 C++ 中,argv[0] 包含可执行文件的名称。对于以正常方式调用的程序,这将是 Windows 上可执行文件的路径。

【讨论】:

  • 不,标准规定 « argv[0] 应是指向 NTMBS 的初始字符的指针,该字符表示用于调用程序的名称或“ "。 » (3.1.6-2) 绝对不是完整路径。
  • 是的,在 nik.shornikov 的链接中看到了。谢谢你的回答。
猜你喜欢
  • 2012-06-07
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
相关资源
最近更新 更多