本地管理员帐户下的服务权限被拒绝

本地管理员帐户下的服务权限被拒绝

我有一个服务应该通过网络复制一些文件,该服务在其中一个本地管理员帐户下运行。

以该管理员身份登录后,我可以手动将文件从网络复制到 下的特定文件夹Program Files,但服务存在 PermissionDenied 异常以写入文件。我还确定在写入之前文件没有被锁定。

错误如下:

拒绝访问路径“.../SomeAssembly.dll”。

为什么服务会给我这样的错误?我该如何纠正?(我也开发了这项服务,因此可以对程序集进行更改)。


更新

我也尝试过运行它,System但它无法读取网络上的文件(不知道为什么),LocalService而且NetworkService据我所知,帐户没有足够的权限来更改 ProgramFiles......是吗?


更新 2

我无法使用的原因System是该帐户在设计上无法访问网络资源,NETWORK SERVICE无法访问本地资源的帐户也是如此。管理员帐户的问题似乎是 Windows 在服务执行文件复制操作时阻止了该操作。

有任何想法吗????

答案1

首先,我会检查是否有任何文件被标记为“只读”,因为我发现此属性有时会取代 NTFS 权限。我见过这样的情况:在“您确定吗?”提示下单击“是”后,您可以在 GUI 中复制文件,但任何使用程序向其中写入数据的尝试都会立即失败,不会给出任何提示。

此外,我会确保服务和相关服务确实在您认为的帐户下运行。我见过一些情况,服务 A 会调用服务 B 来执行某些任务,然后将结果交还给服务 A 来完成任务。如果只有服务 An 使用具有适当权限的帐户,则尝试将失败(因为即使 An 正在调用 B,也不会强制它以 An 正在使用的同一用户身份运行,因此如果 B 本身未配置为使用正确的用户,它将使用默认用户,而默认用户可能无法访问您想要的特定位置)

此外,如果可能的话,请确保它使用的路径像c:\program files\SomeAssembly.dll\somefile.txt或类似的路径C:/users/don/app/SomeAssembly.dll也可能导致错误。

答案2

最后我所做的是让应用程序将文件从远程资源复制到低限制文件夹(Application Data如果我没记错的话),然后调用在下运行的服务System将它们复制到Program Files

这种方法的优点是,它不需要管理权限即可通过网络将文件复制到本地驱动器(当然,只要您read对网络文件拥有正确的权限),然后它还可以利用对System写入 Program Files 所施加的低限制。

答案3

根据另一台计算机正在运行的内容,服务通常在网络服务帐户或本地系统帐户下运行。

我会先尝试一下。

相关内容