gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:49 26 4
gpt4 key购买 nike

我的可执行文件在这个地方 --> 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 的东西

但实际情况是我想在不同的电脑上运行这个 newApp.exe所以我想用另一台电脑中包含“newApp.exe”文件的任何路径替换“”D:\Examples\C_Pro\”。(如 C:\Software\)

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

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

我怎样才能摆脱这个问题。

实际的代码片段是这样的...

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标准中并不标准支持,因为并非所有程序运行的系统都支持这样的概念。然而在实践中这是一个理想的功能。简而言之:好问题。

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

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

如果 argv[0] 不包含任何 /,那么您将不得不遍历 PATH 环境变量以找到第一个包含 argv[0] 的目录。

如果这一切都失败了,您的应用程序已通过 execl 或其 friend 之一调用,并且他们对可执行文件的位置不诚实。你真倒霉。

关于c - 如何在 Windows 上使用 C 语言将 AppPath 获取到可执行文件的目录(使用 MinGW gcc ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15776269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com