我正在创建一个Windows服务,以将当前用户名和登录时间保存在CSV文件中。但是当我安装服务时,文件刚刚创建,没有向其写入详细信息,并且该文件被设置为只读模式。我的代码中有什么问题?
我的代码:
Imports System.IO
Imports System.Text
Imports System.DirectoryServices
Imports System.DirectoryServices.AccountManagement
Imports System.Diagnostics
Public Class LoginService1
Protected Overrides Sub OnStart(ByVal args() As String)
Dim win As System.Security.Principal.WindowsIdentity
win = System.Security.Principal.WindowsIdentity.GetCurrent()
Dim Logon_UserName = win.Name.Substring(win.Name.IndexOf("\") + 1)
Dim pc As New PrincipalContext(ContextType.Machine, My.Computer.Name)
Dim uc As UserPrincipal = UserPrincipal.FindByIdentity(pc, Logon_UserName)
Dim str As String = ""
Try
Dim sr As New StreamReader("c:\logondetails.csv")
str = sr.ReadToEnd()
sr.Close()
sr.Dispose()
Catch ex As Exception
End Try
Try
Dim sw As New StreamWriter("c:\logondetails.csv")
Str += Logon_UserName & "," & uc.LastLogon.Value.ToString
sw.WriteLine(str)
sw.Close()
sw.Dispose()
Catch ex As Exception
End Try
End Sub
Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.'
End Sub
End Class
答案 0 :(得分:1)
有很多方法可以解决你正在做的事情。
对于1,您不需要读入整个文件以附加到它的末尾。例如
using(var stream = File.AppendText(fileName))
{
stream.Write(string);
stream.Close();
}
但是您将遇到并发访问该文件的问题。您最好使用日志框架,例如log4net或microsoft logging block,然后再使用
Logger.Info(yourstring);
并完成它。该框架将处理文件访问问题。