C++ 搜索.exe的路径

C++ 搜索.exe的路径,c++,windows,path,C++,Windows,Path,因此,我正在寻找一段代码,它允许我搜索执行它的文件的路径。例如,我正在做一个在pendrives(例如)中使用的自动运行程序,但我不知道它是否会以D:,F:,G:或其他形式结束,因此程序会搜索它自己的路径,并根据使用一些“if”语句找到的路径打开另一个文件 以下是我的想法: #include <stdlib.h> #include <iostream> using namespace std; int main () { // I

因此,我正在寻找一段代码,它允许我搜索执行它的文件的路径。例如,我正在做一个在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;
    }
#包括
#包括
使用名称空间std;
int main(){
//在此处插入“搜索路径”代码和所需变量。
如果(-ThePath-=“d:\\AutoRun.exe”)
{
系统(“d:\\MyFolder\\OtherProgram.exe”);
}
else if(-ThePath-=“f:\\AutoRun.exe”)
{
系统(“f:\\MyFolder\\OtherProgram.exe”);
}
else if(-ThePath-=“g:\\AutoRun.exe”)
{
系统(“g:\\MyFolder\\OtherProgram.exe”);
}
其他的
{

cout
GetModuleFileName
:文档

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

TCHAR szPath[MAX_PATH];

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

    // handle error in GetModuleFileName

} else {

    // now, szPath contains file path

};

GetModuleFileName
:文档

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

TCHAR szPath[MAX_PATH];

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

    // handle error in GetModuleFileName

} else {

    // now, szPath contains file path

};


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

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

运行此示例,您会得到一个惊喜:较新的Windows版本几乎已经停止支持自动运行。这太危险了,从安全角度来看。@mAlters-绝对,也称为AutoMalware。@nik.shornikov Ha,pleasure indeed。谢谢!@MSalters是的,你是对的,不过这只是一个例子。它可能不是自动运行,而是一个简单的程序,可以在pendrive中打开另一个。运行这个例子,你会得到一个惊喜:较新的Windows版本几乎已经停止支持自动运行。这太危险了,安全性太高了。@MSalters-当然,也就是自动运行ware.@nik.shornikov-Ha,确实令人愉快。谢谢!@MSalters是的,你是对的,但是这只是一个例子。它可能不是自动运行,而是一个简单的程序,可以在pendrive中打开另一个。不,标准规定«
argv[0]
应该是指向NTMBS的初始字符的指针,该字符表示用于调用程序或“.”(3.1.6-2)的名称,绝对不是完整路径。是的,在nik.shornikov的链接中看到了。感谢您的回答。不,标准声明«
argv[0]
应为指向NTMBS初始字符的指针,该字符表示用于调用程序或“”的名称(3.1.6-2)当然不是完整的路径。是的,在NK。Surnkof的链接中看到了。谢谢你的答案。好代码,虽然乍一看我看起来有点太复杂了。我还是一个初学者,学习C++大约半年。我会研究它,提高自己:P谢谢分享。PedroPellegrini:这是正确的答案。NAPI确实是令人讨厌的,尤其是对于那些习惯于真正的字符串的C++程序员。我知道了。谢谢,我要试试。好代码,虽然乍看起来好像太复杂了。我还是初学者,我学习C++大约半年。我会研究它,提高我自己:P谢谢分享。PedroPellegrini:是正确的答案。WiAPI确实是令人讨厌的,尤其是对于那些习惯于真正的字符串的C++程序员。嗯,我明白了。谢谢,我会尝试一下。