[英]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.CommandLine
和Environment.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.