9

我制作了一个安装在c:\Program Files\My Service目录中的 Windows 服务。除了可执行文件,我还有一个安装在同一目录中的 XML 文件。服务使用此 XML 文件来获取用户定义的信息。

在服务的代码中,我读取文件,就好像它是可执行文件的本地文件一样。例如:

DataSet ds = new DataSet();
ds.ReadXml("Foo.xml");

但是,当我运行该服务时,该服务会抛出一个异常说:

找不到文件“C:\Windows\system32\Foo.xml”

由于可执行文件存在于c:\Program Files\My Service我希望 Windows 服务在c:\Program Files\My Service\Foo.xml. 显然,事实并非如此。

如何强制服务在服务可执行文件所在的同一位置(相对)查找 Foo.xml 文件?

4

3 回答 3

15

用这个:

System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Foo.xml");
于 2012-06-26T18:46:16.410 回答
0

这将为您提供所需的

 DataSet ds = new DataSet();
 ds.ReadXml(System.IO.Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location,"Foo.xml");
于 2012-06-26T18:44:01.360 回答
0

由于 windows 服务工作目录是 C:\Windows\System32。

为了按预期读取您的 xml 文件,您必须执行以下操作

DataSet ds = new DataSet(); 
ds.ReadXml(Path.Combine(System.Reflection.Assembly.GetExecutingAssembly().Location, "Foo.xml")); 
于 2012-06-26T18:47:13.520 回答