【发布时间】:2019-09-19 17:21:06
【问题描述】:
使用C/C++,我们可以得到argv[0]:
printf("%s\n",argv[0])
在 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
仅供参考:在具有上述 C/C++ 代码的 Linux 下(其结果在此处被视为黄金标准),它会打印用于调用程序的确切路径(绝对或相对),如果您调用程序通过任何符号链接,将打印符号链接的名称而不是实际程序。
我问这个问题是因为我尝试在 Ubuntu 下使用 C# 编写一个包装程序,它应该通过 argv[0] 以完全透明,以防被包装程序的行为取决于 argv[0]。
【问题讨论】:
-
C# is base 0.
printf("%s\n",argv[0])时的错误信息是什么? -
@Jeremy Thompson ?听不懂你说什么。
-
如果你想要Assembly的路径可以试试:
var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.Replace("bin\\Debug", string.Empty)); -
Assembly.GetExecutingAssembly().Location将为您提供程序集的完整路径。在.Net Core中,这将是DLL,对于.Net Framework控制台应用程序,这将是.exe -
请阅读问题,我不想获得许多 API 可以提供的程序集。我需要在 C/C++ 程序中准确地获取 argv[0]。这通常与程序集名称不同。应该有一个 Program 的属性来提供这个。