1

我创建了一个 Windows 服务。我使用 Windows 安装程序设置服务。我有一个类似于配置文件的 XML 文件。每当我通过附加调试项目来调试 Windows 服务时,它都可以正常工作。但安装后我可以看到事件说在 C:\Windows\system32 中找不到 example.xml 文件。这是一个重复的问题。谁能告诉我这是怎么回事。或者有什么建议?

4

4 回答 4

2

很可能文件不在您要查找的位置。

很有可能您的代码在“当前工作文件夹”中查找,在 VS 中调试期间该文件夹与应用程序相同,但在作为服务/从命令行启动的情况下是不同的。

确保您的代码从您希望文件所在的位置(即应用程序旁边)加载文件,而不是从某个相对路径(如“myfile.xml”)加载文件。

于 2013-03-14T19:57:18.113 回答
2

这不是安装程序问题。Windows 服务始终以 System32 作为当前目录启动。在启动任何服务之前,将此行添加到 Program.cs 中的 Main() 方法中。

    Environment.CurrentDirectory = new FileInfo(Assembly.GetExecutingAssembly().FullName).DirectoryName;
于 2013-03-14T20:20:59.630 回答
1

为什么要将内容保存在 Windows 文件夹中?除非有一个非常好的理由这样做,否则这很糟糕。将您的配置安装在您的应用程序正在运行的同一位置并获取文件路径:

var folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var configPath = Path.Combine(folderPath, configFileName);
于 2013-03-14T20:20:35.810 回答
-1

问题是您的服务没有以管理员身份运行。如果该服务没有以管理员身份运行,那么它将无法读取 system32 文件夹下的文件。

将服务属性更改为以管理员身份运行。那应该可以解决问题。

于 2013-03-14T19:57:42.283 回答