使用 C/C++,我们可以得到 argv[0]:
printf("%s\n",argv[0])
Run Code Online (Sandbox Code Playgroud)
在 C# 中,args 以 argv[1] 开头。
非波纹管 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
Run Code Online (Sandbox Code Playgroud)
仅供参考:在具有上述 C/C++ 代码的 Linux 下(其结果在这里被视为黄金标准),它打印用于调用程序的确切路径(绝对或相对),如果您通过任何符号调用程序链接时,会打印符号链接的名称而不是实际程序。
我问这个问题是因为我尝试在 Ubuntu 下使用 C# 编写一个包装程序,它应该通过 argv[0] 以完全透明,以防包装程序的行为取决于 argv[0]。