zoukankan      html  css  js  c++  java
  • vs2008 创建windowsservice

    写在前面,本文参考多处网上文章及自己的体会心得

    下面说一下步骤
    1. 新建一个项目
    2. 从一个可用的项目模板列表当中选择Windows服务
    3. 设计器会以设计模式打开
    4. 从工具箱的组件表当中拖动一个Timer对象到这个设计表面上

    此处要注意的:服务一跑起来,唉,怎么回事,时间到了怎么没有执行事件呢???????
    后来,我找很多资料才知道,这个Timer控件是winForm下的,不能用在windows服务程序中.
    怎么办呢.......
    打开"工具箱"---右键---"选择项"---找到Timer控件,看好了,这个Timer控件的是system.Timer下的.可不是System.Windows.Form.然后添加.

    5. 设置Timer属性和Interval属性

    在InitializeComponent();的下面
    timer1.Enabled = true;
    //timer1.Interval = 1000 * 60 * 60; //一小时执行一次
    timer1.Interval = 1000 * 1;

    6. 然后为这个服务填加功能


    7.双击这个Timer,然后在里面写一些要操作的代码,比如

    string sql = "insert into a (aa) values ('" + DateTime.Now.ToString() + "')";
    ExcuteSql(sql);

    8. 将这个服务程序切换到设计视图


    9. 右击设计视图选择“添加安装程序”


    10. 切换到刚被添加的ProjectInstaller的设计视图


    11. 设置serviceInstaller1组件的属性:
         1) ServiceName = My Sample Service 在我的电脑-管理-服务 中出现的服务的名称
         2) StartType = Automatic (开机自动运行)


    12. 设置serviceProcessInstaller1组件的属性   Account = LocalSystem


    13. 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)


    14. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。(InstallUtil这个程序在WINDOWS文件夹\Microsoft.NET\Framework\v1.1.4322下面)

    此处因为是VS2008创建的,所以要用.NET2.0的installutil注册服务

    打开CMD窗口--开始--运行--输入CMD,回车
    //注册服务命令


    cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727


    InstallUtil ....exe 路径


    15. 右击桌面上“我的电脑”,选择“管理”就可以打计算机管理控制台


    16. 在“服务和应用程序”里面的“服务”部分里,你可以发现你的Windows服务已经包含在服务列表当中了


    17. 右击你的服务选择启动就可以启动你的服务了


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sinton/archive/2009/12/29/5097290.aspx

     

    所犯的错误:

    (1)---- 可以安装成功,可是timer一直没能执行;;;错误原因: Timer控件的是system.Timer下的.可不是System.Windows.Form.然后添加.

    (2)---- 可以执行了,可是提示"类型初始值设定引发异常"---使用了sql查询,而没有配置sql对应的链接字符串,添加APP.config配置文件,配置对应字符串,如: 

     <!-- 数据库配置 -->
      <connectionStrings>
        <add name="DBConnectionString" connectionString="Data Source=IBM-DC313B70E57\SQLEXPRESS;Initial Catalog=NIKON_SIS;Integrated Security=True" providerName="System.Data.SqlClient" />    
      </connectionStrings>

    (3)---使用了动态链接库,要添加对应的引用(dll文件).

    (4)---测试可以用向一个文本文件中写内容;或者使用EventLog记录信息

    代码
                    #region use write file to test
                    
    //use EventLog test
                    EventLog log;
                    log 
    = new EventLog();
                    log.Source 
    = "timerMain_Elapsed";
                    log.WriteEntry(
    "begin timer function!", EventLogEntryType.Information);

                    
    //use FileStream test
                    System.IO.FileStream fstream = new System.IO.FileStream("E:/a.txt", System.IO.FileMode.Append);
                    System.IO.StreamWriter stw 
    = new System.IO.StreamWriter(fstream);
                    stw.WriteLine(
    "test");
                    stw.Flush();
                    stw.Close();
                    fstream.Close();
                    
    #endregion

     对于eventLog记录的信息可以在电脑--管理--事件查看器中查看(至于是应用程序还是系统,和所设置的Account属性有关)

    (5)调试时,选择附加到进程,进程的名字与项目名字相同,而不是服务类名相同..设置断点,服务运行到断点的话就进入了调试..当运行结束后,如需再次调试,则需再次附加到进程

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/9421/p/1727075.html
Copyright © 2011-2022 走看看