如何在Windows上使用C语言来获得APPPATH可执行文件的目录(使用MinGW的GCC)(Ho

2019-10-17 23:31发布

我的可执行文件是在这个地方 - > d:\例子\ C_Pro \ newApp.exe也是在这 “C_Pro” 文件夹中包含多个文件(FILE1.TXT,FILE2.TXT,file44.exe,newApp.c)

在我newApp.c文件,我包括ShellExecute函数来执行这样在同一个文件夹 “file44.exe” 文件 - >的ShellExecute(NULL, “开放”, “d:\例子\ C_Pro \ file44.exe”,NULL ,NULL,1)

这样所有的正常工作..

我在VB谈论APPPATH喜欢的事

但此案是我想在不同的PC上运行这个newApp.exe是那么我想替换“” d:\例子\ C_Pro \”包含在另一台电脑‘newApp.exe’文件(如C通过这一切的路径。 :\ SOFTWARE \)

我使用GetModuleFileName函数来获取路径,但它包含我只在该新目录PathRemoveFileSpec功能不起作用的点要newApp.exe一部分。

也GetModuleFileName像返回路径 - > d:\例子\ C_Pro \ newApp.exe但是当我们把一些路径来ShellEcxecute的要求双倍shalse(空间序列)这样的 - > d:\例子\ 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);
}

Answer 1:

获取到的可执行文件位于未在C标准标准地支持目录的绝对路径,因为不是所有的系统,其中程序运行支持这样一个概念。 然而在实践中是一个理想的功能有。 总之:很好的问题。

不幸的是它不是那么简单,如果你的程序使用调用execl CS它甚至可能是不可能的。 你将不得不重播shell上以确定哪些应用程序来运行,并与开始argv[0]为paulsm4也一样。 在Linux中,如果路径的开头/ ,然后argv[0]是可执行文件的绝对路径,你可以通过在年底可执行文件名的剥离找到目录。 在Windows上,你将不得不检查\和可能的驱动器盘符,我不知道。 我们将在其余的Linux承担,刚读\每一个/把它应用到Windows。

如果argv[0]是不是绝对路径如上,你应该检查是否包含任何/所有,因为如果这样做,必须是相对于getcwd作为被paulsm4也有描述。

如果argv[0]不含任何/ ,那么你将不得不通过运行PATH环境变量来查找第一个包含目录argv[0]

如果所有的失败,你的应用程序已经通过调用execl或它的朋友之一,他们不是诚实的可执行文件的位置。 你的运气了。



Answer 2:

这样的事情在Windows上运行:

#include <stdio.h>
#include <stdlib.h>

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


文章来源: How to get AppPath to Executable file's directory using C language on Windows (using MinGW gcc )