簡體   English   中英

我們如何在 C# 中獲取 argv[0]?

[英]How can we get argv[0] in C#?

使用 C/C++,我們可以獲得 argv[0]:

printf("%s\n",argv[0])

在 C# 中,args 以 argv[1] 開頭。

Non of bellow API 給出了 argv[0],至少在 Linux 下是這樣:

AppDomain.CurrentDomain.FriendlyName: only gives the name, no path
Process.GetCurrentProcess().ProcessName: gives wrong result with symbol link, and no path
Process.GetCurrentProcess().MainModule.FileName:  gives wrong result with symbol link, and the path is always absolute

僅供參考:在 Linux 下使用上述 C/C++ 代碼(其結果在這里被視為黃金標准),它打印用於調用程序的確切路徑(絕對或相對),如果您通過任何符號調用程序鏈接,符號鏈接的名稱被打印而不是真正的程序。

我問這個問題是因為我嘗試在 Ubuntu 下使用 C# 編寫包裝程序,如果包裝程序的行為取決於 argv[0],它應該傳遞 argv[0] 以完全透明。

Environment.CommandLineEnvironment.GetCommandLineArgs()應包含完整且未修改的命令行。

接受的答案在 Linux 上的 .NET 5 上對我不起作用,我得到$PROJECT_DIRECTORY/bin/Debug/net5.0/$PROJECT_NAME.dll 此外,如果使用符號鏈接,這不會改變。

相反,我必須使用這個不可移植的 hack(取自這個評論):

(await File.ReadAllTextAsync("/proc/self/cmdline")).Split('\0')[0]

結果:

$ bin/Debug/net5.0/bpm
argv[0]: bin/Debug/net5.0/bpm
$ ln -s bin/Debug/net5.0/bpm foo
$ ./foo
argv[0]: ./foo

暫無
暫無

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

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