我看到有一些方法来获得应用程序文件夹路径:

应用程序。StartupPath System.IO.Path.GetDirectoryName ( System.Reflection.Assembly.GetExecutingAssembly () .Location) AppDomain.CurrentDomain.BaseDirectory System.IO.Directory.GetCurrentDirectory () 环境。CurrentDirectory System.IO.Path.GetDirectoryName ( System.Reflection.Assembly.GetExecutingAssembly () . getname () .CodeBase) System.IO.Path.GetDirectory (Application.ExecutablePath)

根据具体情况,最好的方法是什么?


当前回答

我成功地用过这个

System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)

它甚至可以在linqpad内部工作。

其他回答

对于web应用程序,要获得当前web应用程序根目录,通常通过web页面调用当前传入的请求:

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

以上代码描述

我在会话中通过Win32 API从Windows服务启动了一个进程,从实际登录的用户(在任务管理器会话1而不是0中)。在这是我们可以知道,哪个变量是最好的。

对于上述问题中的所有7个案例,结果如下:

Path1: C:\Program Files (x86)\MyProgram
Path2: C:\Program Files (x86)\MyProgram
Path3: C:\Program Files (x86)\MyProgram\
Path4: C:\Windows\system32
Path5: C:\Windows\system32
Path6: file:\C:\Program Files (x86)\MyProgram
Path7: C:\Program Files (x86)\MyProgram

也许这对你们中的一些人是有帮助的,当你为你的情况寻找最佳变量时。

获取我使用的简单桌面应用程序的.exe路径

Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)

返回路径到.exe。 还要注意,对于一些域,默认域的.exe将被返回,或者ExecuteAssembly(String)第一次调用时执行的.exe,如果该条目是非托管的,则将返回null。

小心使用GetExecutingAssembly(),命名对我来说是令人困惑的,因为我希望得到。exe,但它返回。dll或。exe,代码放在那里,所以在GetExecutingAssembly()放置在库的情况下,它返回库。

如果你知道根目录:

string rootPath = Path.GetPathRoot(Application.StartupPath)

请注意,并非所有这些方法都会返回相同的值。在某些情况下,它们可以返回相同的值,但要注意,它们的目的是不同的:

Application.StartupPath

返回StartupPath参数(可以在运行应用程序时设置)

System.IO.Directory.GetCurrentDirectory()

返回当前目录,该目录可能是应用程序所在的文件夹,也可能不是。Environment.CurrentDirectory也是如此。如果您在DLL文件中使用它,它将返回进程运行的路径(在ASP.NET中尤其如此)。