我在同一个文件夹中有两个exe文件,我可以从exe1中的一个按钮运行exe2。今天我通过远程(终端服务)会话观察客户,exe2无法运行'找不到文件'错误,但是当我们检查时,exe1在同一目录中。我应该使用AppDomain.CurrentDomain.BaseDirectory还是System.Environment.CurrentDirectory?
由于
答案 0 :(得分:171)
如果要在与应用程序相同的目录中查找文件,AppDomain.CurrentDomain.BaseDirectory
是正确的选择。
Environment.CurrentDirectory
是一个可以并且将在运行应用程序的过程中发生变化的值。例如,使用默认参数,WinForms中的OpenFileDialog会将此值更改为从中选择文件的目录。
答案 1 :(得分:16)
AppDomain.CurrentDomain.BaseDirectory返回加载当前应用程序域的目录。 System.Environment.CurrentDirectory返回当前系统目录。 在您的情况下,AppDomain.CurrentDomain.BaseDirectory是最佳解决方案。
答案 2 :(得分:12)
您应该使用AppDomain.CurrentDomain.BaseDirectory
。
例如在Windows服务应用程序中:
System.Environment.CurrentDirectory
将返回 C:\ Windows \ system32
虽然
AppDomain.CurrentDomain.BaseDirectory
将返回[Application.exe位置]
需要注意的另一个重要因素是AppDomain.CurrentDomain.BaseDirectory
是一个只读属性,而Environment.CurrentDirectory
可能是必要的其他内容:
// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
答案 3 :(得分:6)
据我了解,您应该使用BaseDirectory
。 CurrentDirectory
可能会在程序执行过程中发生变化。
答案 4 :(得分:3)
在Visual Studio 2010测试项目中,如果启用“编辑测试设置”的部署选项,则AppDomain.CurrentDomain.BaseDirectory指向TestResults \ Out文件夹(而不是bin \ debug)。 虽然,默认设置指向bin \ debug文件夹。
我在这里找到了令人信服的答案。
Why AppDomain.CurrentDomain.BaseDirectory not contains "bin" in asp.net app?
答案 5 :(得分:2)
我通常使用类似的东西:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
AppPath = AppPath.Replace("file:\\", "");
答案 6 :(得分:2)
我正在使用
这几天过去了Environment.CurrentDirectory
因为它在生产服务器上给了我一个问题但是我的本地服务器工作正常,
所以,我尝试了
System.AppDomain.CurrentDomain.BaseDirectory;
它在环境中对我有用。
所以,正如他们所说的那样我们应该一直用
System.AppDomain.CurrentDomain.BaseDirectory;
检查当前域目录中的路径。
查看更多信息