Windows服务权限问题

时间:2011-07-30 00:35:18

标签: vb.net windows-services windows-server-2003

我编写了一个使用openpop邮件客户端的Windows服务并撤消了电子邮件。然后它通过主题和身体更新数据库和各种东西。它还会下载附件并根据电子邮件的时间戳创建文件夹目录,该时间戳按年份,然后是月份,然后是日期,然后保存图像。因此,我使用类库项目,用于调试的winform项目和Windows服务项目在开发中的机器上构建了此服务。 所有逻辑都包含在Classlibrary中。我构建了库并在窗体和窗口服务中引用了dll。当我在我的机器上构建服务并使用installutil安装它时,它工作正常,并完成它应该做的事情。但是当我投入生产时,操作系统是Windows Server 2003 R2,它正在为LIVE数据库使用不同的连接字符串。

唯一改变的是连接字符串和操作系统。我安装了服务并安装得很好,但什么也没做。它不会创建文件夹或将图像保存到磁盘。我知道我应该记录错误,但这是我的第一份工作,我是这个领域的新手。所以我尝试编写一些日志记录事件,但它不会创建日志并编写事件。事实上,如果我尝试创建日志并编写一个事件,作为我在onstart sub中的第一次调用,它就不会这样做。现在我迷路了,我不知道从哪里开始。如果您花时间阅读本文,我感谢您提供的任何意见。

这是我的OnStart方法中的代码。

    Dim LiveEvents As New EventLog
    If Not EventLog.SourceExists("MySource") Then
        EventLog.CreateEventSource("MySource", "GL")
    End If
    LiveEvents.Source = "MySource"
    LiveEvents.Log = "GL"
    LiveEvents.WriteEntry("ServiceStarted and is working.", EventLogEntryType.Information)
    Dim Logic As New ProcessMail
    workTimer = New Timer(New TimerCallback(AddressOf Logic.ProcessMessages), Nothing, (1000 * 60 * 10), (1000 * 60 * 10))
    LiveEvents.WriteEntry("Called Our DLL", EventLogEntryType.Information)
    MyBase.OnStart(args)

所以,如果你不知道这里的问题,他们会去。 1.如果我需要在Windows Server 2003 R2中使用Windows服务创建directorys并保存文件。我应该使用什么系统System.ServiceProcess.ServiceInstaller帐户属性? 2.在winows server 2003 R2中是否需要进行任何特殊的设置过程以允许我安装的服务具有对目录进行读写访问的权限?

感谢您提供的任何信息和帮助。

1 个答案:

答案 0 :(得分:1)

您选择的帐户需要具有足够的目录权限。只要您在文件夹上设置了正确的权限,该帐户就没有什么特别之处。最简单的故障排除方法是从强大的帐户开始(例如,本地系统,您可以通过“登录”选项卡下的服务属性小程序随意更改帐户,只需停止并重新启动服务,并查看帐户更改是否有任何区别)。您还可以让“所有人”拥有该文件夹的完全访问权限,看看帽子是否有任何区别。只需记住在诊断问题后只留下必要且尽可能少的权限和权限。

此外,您的问题可能在其他地方。您应该检查事件查看器是否有任何错误。您可以使用sysinternals中的一些工具来帮助您找到问题(http://technet.microsoft.com/en-us/sysinternals/bb545027)。服务运行的帐户需要具有足够的权限才能写入事件日志。因此,这是尝试以特权用户身份运行该服务以查看它是否将开始写入日志的另一个原因。当然,正如您所提到的,添加更多日志记录也是一个不错的选择。

确保安装的服务没有错误,并显示为在服务小程序中运行。