不是从自己的目录运行程序崩溃

时间:2013-11-13 16:12:14

标签: c# xml path

一个基本问题:

我有一个C#Windows应用程序,通过输入

从其自己的目录执行时运行正常
program1.exe

但是当我从另一个目录执行它时给出了像

这样的完整路径
d:/progs/myprog/program1.exe
它崩溃了。我真的需要这样做:)

我认为它与通过程序读取一些文件有关,这些文件位于同一目录中。我怀疑的是:

using (XmlReader OdczytywaczXML = XmlReader.Create(@"config.xml"))

可能是问题吗?我不想提供文件的完整路径,因为我希望我的程序只需复制文件即可在任何地方工作。

哦,我不知道如何在调试时模拟这种情况(从另一个目录运行) - 是否可能?

3 个答案:

答案 0 :(得分:5)

在这种情况下,您应该检测您的程序位置并构建config.xml的完整路径,例如:

var filePath = Path.Combine(
    Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
    @"config.xml");

要模拟条件,请转到项目属性,页面“调试”并设置Working Directory

答案 1 :(得分:2)

这肯定是问题所在。您可以在该行添加目录信息。在WinForms中,您可以使用Application.StartupPath作为示例。

一般情况下,您可以使用System.Reflection.Assembly.GetExecutingAssembly().Location

答案 2 :(得分:1)

问题是当您从命令行执行它时Working Directory不一样。你想要保护这个:

var path = Path.Combine(Assembly.GetExecutingAssembly().Location, "config.xml");
using (XmlReader OdczytywaczXML = XmlReader.Create(path))

Location属性将为您执行以下操作:

  

获取包含清单的已加载文件的完整路径或UNC位置。

此处需要注意的一点是,如果您在Desktop添加了快捷方式并在更改代码之前设置了Working Directory,您会发现应用程序运行正常。首先要验证修复是否有效。