2011-09-19 90 views
2

我有这个控制台应用程序。现在我已经添加了环境变量PATH到它的设置,以便它可以通过控制台从任何位置执行。奇怪的是,同样的应用程序正在打破这种变化。影响相对文件路径的环境PATH变量

安装目录包含BIN和CONFIG文件夹。 Exe放在BIN文件夹内。

我有这行代码,

WriteToFile(@"..\Config\Settings.xml") 

用于写入配置文件夹内的文件将Settings.xml安装目录内的路径。但是,现在它会尝试写入执行路径下的Config文件夹内的settings.xml文件。因此,如果我从控制台执行我的应用程序作为c:/users/guest/app.exe,它会尝试解释相对于此位置的路径,而不是相对于应用程序的安装目录。

任何帮助,建议?

回答

0

获取执行的程序集的路径,然后添加到它的文件夹和文件名:

string pathOfExecutingAssembly = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 
string settingsPath = pathOfExecutingAssembly + "\\..\\Config\\Settings.xml" 
0

你为什么不尝试获得执行应用程序的路径,并要保存路径前追加它

+0

只是点击张贴答案,你的答案在顶部:) – Madhan

0

从\开始的路径\表示:从当前驱动器的根目录开始。从任何C子目录执行的\ Config \ Settings.xml给出:C:\ Config \ Settings.xml。

顺便说一句,你发布确切的代码?它应该是WriteToFile(@“\ Config \ Settings.xml”)或WriteToFile(“\ Config \ Settings.xml”)

无论如何,您需要决定是否要使用绝对路径搜索配置文件,或相对于当前目录/安装目录/可执行目录的路径。代码,安装包和执行命令应相应更改。

+0

真的很抱歉没有发布确切的代码。但是我主要关心的是首先要确认的是,只有将Environment PATH变量添加到设置中才能导致这样严重的副作用。 – EagerToLearn

+0

这不是PATH,因为你使用相对路径,所以这是当前目录,可以改变你的程序行为。在更改PATH变量后,您现在可以从控制台窗口运行应用程序,而不需要cd到应用程序可执行文件目录。 –