如果你的软件需要访问本地的文件或文件夹,并进行相关的操作时,那么在Windows Service2003系统中部署时,总是碰到一些莫名其妙的错误,明明在其他地方可以运行,一部署后,就是不能运行,跟踪调试时,才发现原来是权限的问题。
设置windows服务的访问权限
如果你的程序里面有一个windows服务,而且还要访问本地的文件,那么你需要为windows服务的用户设置对这个文件的访问权限。在 Windows 操作系统中,每个服务都运行在一个用户帐户安全上下文中。你可以在“计算机”—“管理”—“服务”里面找到你的服务,然后右键“属性”,切换到“登录”选项卡,你就可以看到你的服务是运行在哪个账户上的。
一般自己创建的服务都是AUTHORITY\LocalService这个账户。
像Sql Server是运行在NetworkService账户上的
(更多关于windows服务用户账户,可以参考这篇文章Windows服务用户账户)。
找到了这个用户就好办了,现在我们找到在Windows服务里面会访问的那个本地文件夹。比如,你在程序里面会操作C:\新建文件夹,那么你就把这个文件夹选中,右键“属性”——“安全”
一看,上面没有LocalService这个用户,没关系,点击“添加”
点击“高级”
点击“立刻查找”
是不是看到了这个用户。选中它。点击确定,回到第一窗体上。
选中这个用户,为它赋予权限,你可以根据实际需要赋予相应的权限。
Ok,这样就设置好了,你再通过Windows服务来访问这个文件,不管对它进行什么操作都不会有权限的问题了。
设置WebService的访问权限
如果你的程序会通过Web Service来访问本地的文件夹,那么也需要设置权限。Web Service也有一个用户,这个用户默认的就是NetWork Service用户。
设置的步骤与上面的类似,也是找到那个文件夹,然后查找到这个用户,如下图,然后点击确定,最后赋给它相应的操作权限。
设置完毕后,就可以顺利的访问了。
如果你嫌麻烦,你可以选中那个文件夹,然后给它的EveryOne用户赋予所有的权限,那么不管是Windows服务,还Web Service都可以进行访问,不过这样可能会带来安全问题.