哪里可以存储本地服务appdata?

时间:2012-10-05 14:20:01

标签: c# windows-services appdata

我正在编写一个具有“LocalService”帐户类型的Windows服务。我有一个存储它必须做的文件。

我还有一个Windows窗体GUI,其中还访问该文件以添加/删除要执行的服务的操作实例。 (不知道它的相关性,但服务从Web服务下载表并将它们导出到用户可以访问的任何数据库。这些下载计划定期发生)

该服务仅安装在用户帐户上。

我计划将文件存储在用户appdata文件夹中但是在调试服务时我收到错误“访问路径[路径]被拒绝”

您建议在哪里存储此文件,以便可以从两个程序访问它? 感谢

编辑:再看一点,我意识到了

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

找到服务和windows窗体应用程序的不同路径。 那个应用程序无法访问服务appdata,就像服务似乎无法访问用户appdata一样。所以同样的问题就出现了!

另一个编辑: 事实证明

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

可从本地服务和用户程序访问 - doh

...但有些地方似乎只读......

1 个答案:

答案 0 :(得分:0)

我认为有三种选择:

  • 以用户的登录ID
  • 运行服务

上行 - 两个进程对文件系统的各个部分具有相同的访问权限,因此应删除您的直接问题

下行 - 如果用户更改密码,则两者将不同步。

  • 写入文件系统(或可能是注册表)的某些“中性”部分,其中共享访问不会成为问题。 AppData的问题在于,正如您所发现的那样,Windows会围绕它设置各种保护措施,以便为不同的用户提供相互保护。

上升 - 写作没问题

下行 - 你有效地发明了自己的标准。 15年前,这将是一个不费脑子的注册表,但这些天我得到的印象是注册表不赞成(尽管ms仍然依赖它!)。如果你确实沿着注册表路线走,请确保你的目标是hklm而不是hkcu否则你会遇到同样的问题!

  • 在设置过程中,请执行一些操作以设置对相关文件夹的访问权限。但这基本上会破坏Windows设置的保护。对我来说听起来不太合理。