如何在控制台应用程序中找到应用程序的路径?
在Windows窗体中,我可以使用应用程序。StartupPath来查找当前路径,但这在控制台应用程序中似乎不可用。
如何在控制台应用程序中找到应用程序的路径?
在Windows窗体中,我可以使用应用程序。StartupPath来查找当前路径,但这在控制台应用程序中似乎不可用。
当前回答
您可以使用下面的代码来获取当前应用程序目录。
AppDomain.CurrentDomain.BaseDirectory
其他回答
上面的答案是我需要的90%,但返回了一个Uri,而不是常规路径。
正如在MSDN论坛的帖子中解释的那样,如何将URI路径转换为正常的文件路径?,我使用了以下方法:
// Get normal filepath of this assembly's permanent directory
var path = new Uri(
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
).LocalPath;
您可以使用下面的代码来获取当前应用程序目录。
AppDomain.CurrentDomain.BaseDirectory
这里有一个可靠的解决方案,适用于32位和64位应用程序。
添加以下参考:
使用System.Diagnostics; 使用System.Management;
将此方法添加到项目中:
public static string GetProcessPath(int processId)
{
string MethodResult = "";
try
{
string Query = "SELECT ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId;
using (ManagementObjectSearcher mos = new ManagementObjectSearcher(Query))
{
using (ManagementObjectCollection moc = mos.Get())
{
string ExecutablePath = (from mo in moc.Cast<ManagementObject>() select mo["ExecutablePath"]).First().ToString();
MethodResult = ExecutablePath;
}
}
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
现在像这样使用它:
int RootProcessId = Process.GetCurrentProcess().Id;
GetProcessPath(RootProcessId);
注意,如果您知道进程的id,那么该方法将返回相应的ExecutePath。
有兴趣的同学可以额外订阅:
Process.GetProcesses()
...将为您提供当前运行的所有进程的数组,并且…
Process.GetCurrentProcess()
...会给你当前的进程,以及他们的信息,如Id等,也有限制控制,如杀死等*
我使用这个如果exe被认为是通过双击它来调用
var thisPath = System.IO.Directory.GetCurrentDirectory();
试试下面这行简单的代码:
string exePath = Path.GetDirectoryName( Application.ExecutablePath);