我想问题一下,一个管理系统想通过windows服务向数据库中写日志,请问怎么做,还有个问题是服务中能弹出MessageBox,我在服务根本就不能引用using System.Windows.Forms不知道为什么

解决方案 »

  1.   

    你要先添加System.windows.form.dll程序集的引用才行。
      

  2.   

    不要好意思,我意思是说,
    1.我想写windows服务程序,通过windows服务程序将我的一个管理系统的每步所做的操作写入数据库,请问怎么实现
    2.还有个问题是,我在写服务程序时用using System.Windows.Forms就报错
      

  3.   

    就是普通的仓储管理系统,我想通过windows服务,将管理系统的所做操作写进数据库
      

  4.   

    谢谢,你说到关键上来了,这个不知道怎么通讯,能不能在我的管理系统直接调用windows 服务程序啊
      

  5.   

    建议不要在Windows服务中创建WindowsForm窗口,没有必要,也不恰当。
    如果要写日志建议使用log4net开源的.net组件,直接支持日志写数据库配置。
    以下是一些参考资料
    http://blog.csdn.net/wuhuif/archive/2006/10/25/1350719.aspx
    http://www.itbody.com/doc/Html/Visual.NET/2250166.html
    http://dev.csdn.net/develop/article/59/59774.shtm
    http://www.cnblogs.com/fujingqiu/archive/2006/11/12/558152.html
    http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
    http://www.cnblogs.com/halabazi/archive/2005/06/21/178720.aspx
    http://www.cnblogs.com/JoinZhang/archive/2006/04/14/375171.html
    http://blog.csdn.net/xjpeng/archive/2005/01/24/265896.aspx
    http://www.cnblogs.com/yorker/archive/2005/04/01/129964.aspx
      

  6.   

    写日志,使用EventLog组件:
    在此演练中,将创建一个 Windows 应用程序,并对其使用一系列控件来启动一系列事件日志记录操作。为应用程序创建窗体和控件
    在“新建项目”对话框中,创建一个 Visual C# 的“Windows 应用程序”,并将其命名为 EventLogApp1。向该窗体添加八个按钮,并为它们设置下列属性:控件
     Text 属性 Name 属性
     
    Button1  创建自定义日志  CreateLog  
    Button2  删除日志  DeleteLog  
    Button3  写入项  WriteEntry  
    Button4  清除日志  ClearLog  
    Button5  验证日志是否存在  VerifyLog 
    Button6  验证源是否存在  VerifySource  
    Button7  移除事件源  RemoveSource  
    Button8  读入项  ReadEntry 
     依次为每个按钮执行下列操作: 在设计器中,双击该按钮以创建该按钮的默认事件处理程序。这将出现代码编辑器,而且出现按钮的 Click 事件的存根 (stub)。返回到“设计”视图,然后双击下一个按钮。继续操作,直到为每个按钮创建了默认事件处理程序存根 (stub)。从“工具箱”的“组件”选项卡,将 EventLog 组件拖到窗体中。 窗体底部的组件栏区域出现 EventLog 组件实例。 创建和删除自定义日志
    在此过程中,将使用 SourceExists 方法验证您要使用的源是否存在,然后使用不存在的日志的名称调用 CreateEventSource 方法。因为此日志不存在,所以当运行此代码时,系统将创建一个自定义日志。创建自定义日志
    在代码编辑器中,找到 CreateLog_Click 过程。键入下列代码。事件的日志和源是成对创建的,在事件日志创建之前,源不能存在。创建事件日志后,EventLog 组件将配置为访问新的事件日志。// Source cannot already exist before creating the log.
    if (System.Diagnostics.EventLog.SourceExists("Source1"))
    {
       System.Diagnostics.EventLog.DeleteEventSource("Source1");
    }// Logs and Sources are created as a pair.
    System.Diagnostics.EventLog.CreateEventSource("Source1", "NewLog1");
    // Associate the EventLog component with the new log.
    eventLog1.Log = "NewLog1";
    eventLog1.Source = "Source1";安全说明: 
    创建事件日志时,如果资源已经存在,则必须决定应进行的操作。另一进程(可能是恶意进程)可能已创建了事件日志,并拥有对该事件日志的访问权。将数据放入事件日志后,其他进程就可使用这些数据了。
     
    删除自定义日志
    在代码编辑器中,找到 DeleteLog_Click 过程。键入下列代码: if (System.Diagnostics.EventLog.Exists("NewLog1"))
    {
       System.Diagnostics.EventLog.Delete("NewLog1");
    }
     
    将项写入日志
    在此过程中,将使用创建的 EventLog 组件实例将项写入日志中。为此,先将组件配置为使用刚创建的源字符串。接着指定要写入的两个项:信息性事件和错误事件。将项写入日志
    在代码编辑器中,找到 WriteEntry_Click 过程。键入下列代码。该代码使用重载的 WriteEntry 方法来写入事件日志。显示的第二个窗体可用于指定消息的类型。如果在本主题后面的“测试代码”部分中使用服务器资源管理器来查看项,则不同类型的项将通过不同的图标来指示。
    eventLog1.WriteEntry("This is an informational message");
    eventLog1.WriteEntry("This is an error message", 
       System.Diagnostics.EventLogEntryType.Error);
    清除日志项
    在此过程中,将使用 Clear 方法从自定义日志中移除现有项。清除日志项
    在代码编辑器中,找到 ClearLog_Click 过程。调用 EventLog 组件实例上的 Clear 方法: 
    eventLog1.Clear();
    验证日志和源
    在此过程中,将创建两个过程:一个过程验证自定义日志是否存在,另一个过程验证源字符串是否存在。将使用这些过程测试运行项目时执行的各种操作的结果。验证自定义日志是否存在
    在代码编辑器中,找到 VerifyLog_Click 过程。创建计算指定的事件日志是否存在并据此显示真或假的消息框。使用此代码: 
    bool logExists = System.Diagnostics.EventLog.Exists("NewLog1");
    MessageBox.Show("Does the log exist? " + logExists.ToString()); 
     验证源是否存在
    在代码编辑器中,找到 VerifySource_Click 过程。创建计算指定的源是否存在并据此显示真或假的消息框。使用此代码: 
    bool sourceExists = 
       System.Diagnostics.EventLog.SourceExists("Source1");
    MessageBox.Show("Does the source exist? " + sourceExists.ToString()); 移除源
    在此过程中,您将编写代码以删除源字符串。为此,您将首先验证涉及的源 (Source1) 是否存在,然后调用 DeleteEventSource 方法移除它。移除创建的事件源
    在代码编辑器中,找到 RemoveSource_Click 过程。
     
    if (System.Diagnostics.EventLog.SourceExists("Source1"))
    {
       System.Diagnostics.EventLog.DeleteEventSource("Source1");
    }
     
    读取项
    在此过程中,将编写代码以循环访问事件日志的项集合并显示日志中的现有消息。从创建的自定义日志中读取项
    在代码编辑器中,找到 ReadEntry_Click 过程。if (eventLog1.Entries.Count > 0) 
    {
       foreach (System.Diagnostics.EventLogEntry entry 
          in eventLog1.Entries)
       {
          MessageBox.Show(entry.Message);
       }
    }
    else 
    {
       MessageBox.Show("There are no entries in the log.");
    }
     测试代码
    本节中将使用服务器资源管理器来验证代码的结果。启动服务器资源管理器
    从“视图”菜单中,访问“服务器资源管理器”。展开当前服务器的节点,然后展开它下面的“事件日志”节点。生成并运行应用程序
    保存文件,并按 F5 键以生成并启动项目。出现带有所创建的八个按钮的窗体。单击“创建自定义日志”按钮。 注意: 
    必须对运行应用程序的服务器具有适当的权限,才能创建 Windows 事件日志。如果此时收到安全性错误,请与系统管理员联系。
     返回到该产品,此时仍处于运行模式中,在“服务器资源管理器”中右击“事件日志”节点。单击“刷新”。验证现在 NewLog1 日志是否出现在“事件日志”节点中。测试创建、删除和验证自定义日志
    返回到运行的窗体,单击“验证日志是否存在”按钮。 应出现一条其文本设置为 True 的提示。 单击“删除日志”按钮,然后再次单击“验证日志是否存在”按钮。 这一次提示应为 False。再次单击“创建自定义日志”按钮重新创建该日志。测试将项写入自定义日志以及从自定义日志中读取项
    在窗体中,单击“写入项”按钮。访问“服务器资源管理器”,并展开 NewLog1 日志。 展开其下方的 Source1 节点。现在应看到两个项已添加到该日志中。一个将具有指示它是信息性项的图标,另一个将具有指示它是一个错误的图标。返回到该窗体,然后单击“读入项”按钮。 将收到两个提示:一个包含信息性项,而另一个包含错误项。注意: 
    如果多次单击“写入项”按钮,将收到更多提示。
     测试清除日志
    在窗体中,单击“清除日志”按钮。在“服务器资源管理器”中,右击 NewLog1 节点,然后单击“刷新”。现在应看到该日志不再包含项。 测试移除源字符串
    在窗体中,单击“移除事件源”按钮。单击“验证源是否存在”按钮。应收到显示“False”的消息,指示源 Source1 不再存在。单击“写入项”按钮。注意: 
    此操作将使您能够向日志中写入项,因为如果源当前不存在,WriteEntry 方法将设置它。
     在“服务器资源管理器”中,右击 NewLog1 节点,然后单击“刷新”。应在该日志中看到两个项。再次单击“验证源是否存在”按钮。应收到显示“True”的消息,指示源 Source1 存在。作为可选操作,您可能还希望在测试时单击“DeleteLog”按钮。这将移除日志 NewLog1 和源 Source1,以便不对系统配置做永久更改。===================
    对于Windows服务程序,不能使用UI,所以不能使用MessageBox,如果为了debug,可以使用trace类。