如何在Windows上使用C语言将AppPath发送到可执行文件的目录(使用MinGW gcc)

我的可执行文件位于此处 – > D:\ Examples \ C_Pro \ newApp.exe此外,“C_Pro”文件夹中还包含多个文件(file1.txt,file2.txt,file44.exe,newApp.c)

在我的newApp.c文件中,我包含一个ShellExecute函数来在这样的文件夹中执行“file44.exe”文件 – > ShellExecute(NULL,“open”,“D:\ Examples \ C_Pro \ file44.exe”,NULL ,NULL,1)

这样一切都正常工作..

我在VB中谈论AppPath之类的东西

但是我想在不同的PC上运行这个newApp.exe所以我想用另一个pc中包含“newApp.exe”文件的路径替换“”D:\ Examples \ C_Pro \“这个。(比如C) :\软件\)

我使用GetModuleFileName函数获取路径但它包含newApp.exe部分我只希望新目录PathRemoveFileSpec函数不起作用。

还有GetModuleFileName的返回路径,如 – > D:\ Examples \ C_Pro \ newApp.exe,但是当我们将一些路径放入ShellEcxecute时,需要双重shalse(空格序列),如下所示 – > D:\ Examples \ C_Pro \

我该如何摆脱这个问题。

实际代码snippt是这个……

int main() { ShellExecute(NULL,"open","D:\\Softwares\\TypingMaster700.exe",NULL,NULL,SW_SHOWNORMAL); } 

但我想这样做。 (这是虚拟的,这里“some_Funtion”表示用于解释目的的虚函数。

 int main() { char *dirPath = some_Function(a,x,d); char *fullPath; fullPath = strcat(dirPath,"\\TypingMaster700.exe"); ShellExecute(NULL,"open",fullPath,NULL,NULL,SW_SHOWNORMAL); } 

在C标准中没有标准地支持获取可执行文件所在目录的绝对路径,因为并非所有运行程序的系统都支持这样的概念。 然而,在实践中,它具有理想的function。 简而言之:好问题。

不幸的是,它不是那么简单,如果使用execl cs调用你的程序,它甚至可能是不可能的。 您将必须重新运行shell以确定要运行的应用程序,并以arlsv4开头的argv[0] 。 在Linux上,如果路径以/开头,则argv[0]是可执行文件的绝对路径,您可以通过在末尾剥离可执行文件名来查找目录。 在Windows上,你将不得不检查\和可能的驱动器号,我不确定。 我们将在其余部分假设Linux,只需读取\为每个/将其应用于Windows。

如果argv[0]不是上面的绝对路径,你应该检查它是否包含任何/根本,因为如果它确实它必须是相对于getcwd如paulsm4所描述的那样。

如果argv[0]不包含任何/ ,则必须运行PATH环境变量才能找到包含argv[0]的第一个目录。

如果全部失败,则通过execl或其中一个朋友调用您的应用程序,并且他们对可执行文件的位置并不诚实。 你运气不好。

这样的东西适用于Windows:

 #include  #include  int main (int argc, char *argv[]) { char buff[255]; getcwd (buff, sizeof (buff)); printf ("path=%s\\%s\n", buff, argv[0]); return 0; }