1

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

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

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

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

您建议将这个文件存储在哪里,以便两个程序都可以访问它?谢谢

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

为服务和 Windows 窗体应用程序找到不同的路径。并且该应用程序无法访问服务应用程序数据,就像服务似乎无法访问用户应用程序数据一样。所以同样的问题存在!

另一个编辑:事实证明

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

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

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

4

1 回答 1

0

我看到的三个选项:

  • 在用户的登录 id 下运行服务

好处 - 两个进程对文件系统的各个部分都具有相同的访问权限,因此应该消除您的直接问题

缺点 - 如果用户更改密码,两者将不同步。

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

上行 - 写作没有问题

不利的一面——你实际上是在发明自己的标准。15 年前,这将是一个显而易见的注册表,但这些天我得到的印象是注册表是不受欢迎的(尽管 ms 仍然依赖它!)。如果您确实走注册表路线,请确保您的目标是hklm而不是hkcu,否则您将遇到同样的问题!

  • 在您的设置过程中,做一些技巧来设置对相关文件夹的访问。但这基本上是在破坏 Windows 设置的保护。对我来说听起来不太明智。
于 2012-10-05T15:48:18.013 回答