簡體   English   中英

如何在Windows上使用C語言將AppPath發送到可執行文件的目錄(使用MinGW gcc)

[英]How to get AppPath to Executable file's directory using C language on Windows (using 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)

這樣一切都正常工作..

我正在談論App中的AppPath

但是我想在不同的PC上運行這個newApp.exe所以我想用另一個pc中包含“newApp.exe”文件的路徑替換“”D:\\ Examples \\ C_Pro \\“這個。(比如C) :\\軟件\\)

我使用GetModuleFileName函數獲取路徑,但它包含newApp.exe部分,我只想到新目錄PathRemoveFileSpec函數不起作用的Point。

以及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標准中沒有標准地支持獲取可執行文件所在目錄的絕對路徑,因為並非所有運行程序的系統都支持這樣的概念。 然而在實踐中,它具有理想的功能。 簡而言之:好問題。

不幸的是,它不是那么簡單,如果使用execl cs調用你的程序,它甚至可能是不可能的。 您將必須重新運行shell以確定要運行的應用程序,並以aruls argv[0]開頭,因為paulsm4也可以。 在Linux上,如果路徑以/開頭,則argv[0]是可執行文件的絕對路徑,您可以通過在末尾剝離可執行文件名來找到該目錄。 在Windows上,你將不得不檢查\\和可能的驅動器號,我不確定。 我們將在其余部分假設Linux,只需讀取\\為每個/將其應用於Windows。

如果argv[0]不是上面的絕對路徑,你應該檢查它是否包含任何/根本,因為如果它,它必須是相對於getcwd如paulsm4所描述的。

如果argv[0]不包含任何/ ,則必須運行PATH環境變量才能找到包含argv[0]的第一個目錄。

如果全部失敗,則通過execl或其中一個朋友調用了您的應用程序,並且他們對可執行文件的位置並不誠實。 你運氣不好。

這樣的東西適用於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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM