none
请教一个window service的问题。。 RRS feed

  • 问题

  • 想做一个window service定时将一些数据存储到数据库中,因为数据库登陆名和密码可能会变化,所以在安装window service应该允许用户提供数据库参数。。请问大家有没有这方面的例子啊,谢谢大家~~~

    2009年11月4日 3:59

答案

全部回复

  • 你好!

    数据库连接信息可以存入在 app.config 文件中, 以便在在发生变化后能通过配置的方式使用新的数据库连接。

    知识改变命运,奋斗成就人生!
    2009年11月4日 4:15
    版主
  • windows service也可以有配置文件吗?

    不好意思,我的意思是在给用户安装时,有可能更改登陆名或密码。。而不是在开发阶段。 谢谢版主 :)
    2009年11月4日 5:44
  • Windows 服务当然可以使用配置文件。

    如果你经常需要更改,可以做一个服务配置程序,比如像一些软件在 Windows 右下角显示一个 notifyicon 使用它的右键菜单打开软件的配置界面并能开启或关闭你的 Windows 服务。

    知识改变命运,奋斗成就人生!
    2009年11月4日 6:06
    版主
  • 1 服务器启动参数  可以传一些变量   比如  myservice.exe /uid:sa /pwd:password
    2 同目录下的  "exe名.appconfig"  xml内的settings  是可以修改的
    3 结合两者 在参数中指定一个外部文件  自己解析
    4 注册表
    成为 Microsoft V Dash了。。。
    2009年11月4日 6:13
  • private readonly string SqlConnectionStr = ConfigurationSettings.AppSettings["sqlconnectionstr"];
    
            protected override void OnStart(string[] args)
            {
            }
    
            protected override void OnStop()        
           {        }       
    
     private void timer_Tick(object sender, EventArgs e)
            {
                using (SqlConnection conn = Conn())
                {
                    conn.Open();
    
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection = conn;
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = "insert into A(A) values (GetDate())";
                        cmd.ExecuteNonQuery();
                    }
    
                    conn.Close();
                }
            }
    
            public SqlConnection Conn()
            {
                SqlConnection conn = new SqlConnection(SqlConnectionStr);
    
                return conn;
            }
    




    做了个小测试,在里面放了一个timer控件,安装后在系统的服务里面能看到了,也启动服务了,请问为什么达不到实际的结果呢?
    2009年11月4日 7:00
  • 打个断点调试一下, timer 是否在运行, SqlConnectionStr 是否正确。
    知识改变命运,奋斗成就人生!
    2009年11月4日 7:14
    版主
  • 打个断点调试一下, timer 是否在运行, SqlConnectionStr 是否正确。
    知识改变命运,奋斗成就人生!
    嗯,我试试,谢谢~


    我把同样的代码做成form窗体程序,运行可以的。。

    2009年11月4日 7:29
  • 打个断点调试一下, timer 是否在运行, SqlConnectionStr 是否正确。
    知识改变命运,奋斗成就人生!


    请问调试是不是这样:
    在程序中打好断点,再发布,重新安装,后再附加进程,然后就可以了吗?
    2009年11月4日 7:40
  • 如何:调试 Windows 服务应用程序


    知识改变命运,奋斗成就人生!
    2009年11月4日 7:47
    版主
  • 谢谢大家了,找到原因了,我原先用的timer控件是Windows.Forms.Timers而不是System.Timers.Timer。

    • 已编辑 xia.feng85 2009年11月4日 8:41 描述不准确
    • 已标记为答案 KeFang Chen 2009年11月5日 2:21
    2009年11月4日 8:40
  • 最好是另外写一个程序来调用这个服务,这样比较容易调试!你试试!
    周雪峰
    2009年11月4日 9:14
    版主