c#自编写的window服务的问题,搞了四个小时没搞定:用installutilexe注册无法运行,而在IDE环境中运行时虽然报"无法从命令行或调试器启动服
c#自编写的window服务的问题,搞了四个小时没搞定:用installutilexe注册无法运行,而在IDE环境中运行时虽然报"无法从命令行或调试器启动服务",但后台服务可以执行...
代码很简单:
做的一个定时器,定时执行下列代码:
try
{
SqlConnection conn = new SqlConnection("server=clx;database=dbpstest;uid=sa;pwd=''");
conn.Open();
SqlCommand cmd = new SqlCommand("insert into stu3 values(1)" , conn);
cmd.ExecuteNonQuery() ;
conn.Close();
}
catch(System.Exception ex)
{
EventLog el = new EventLog("Application");
el.Source = ".NET I/F";
el.EnableRaisingEvents = true;
el.WriteEntry(ex.Message, EventLogEntryType.Error);
}
问题点数:20、回复次数:19Top
1 楼Knight94(愚翁)回复于 2006-05-04 11:23:29 得分 10
to 而在IDE环境中运行时虽然报"无法从命令行或调试器启动服务",但后台服务可以执行...
这是肯定的,不能在IDE环境中进行调试。Top
2 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 11:26:31 得分 0
to Knight94(愚翁):
我的问题太奇怪了..虽然道理是这样,可事实是:
我的后台服务通过IDE点"执行",只要弹出的对话框"无法从命令行或调试器启动服务"不关闭,我可以往数据库插数据...
但通过注册形式,却插不了数据...好郁闷!!!!Top
3 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 11:27:17 得分 0
我在想是不是权限问题...我设置的是localsystem...在"服务"中将它改成administrator也不行....Top
4 楼Knight94(愚翁)回复于 2006-05-04 11:45:34 得分 0
vs2003 or vs2005?Top
5 楼Knight94(愚翁)回复于 2006-05-04 11:45:59 得分 0
你的程序单独写到winform中运行是否有问题Top
6 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 11:46:33 得分 0
vs2003
winform中可以执行!Top
7 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 11:47:14 得分 0
会不会是需要什么服务的支持,已经被我禁止了....Top
8 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:10:09 得分 0
代码写在onstart中可执行,
问题在于定时器不起作用!!!!!!Top
9 楼Knight94(愚翁)回复于 2006-05-04 12:12:25 得分 0
用Thread来替换Timer。Top
10 楼Knight94(愚翁)回复于 2006-05-04 12:13:24 得分 0
我不建议在Windows Service中使用Timer。Top
11 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:14:05 得分 0
我晕,想问为什么timer不起作用,我是将enable设为true...
c#中的thread还没用过,找找资料...Top
12 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:14:30 得分 0
我不建议在Windows Service中使用Timer。
为什么???Top
13 楼Knight94(愚翁)回复于 2006-05-04 12:33:47 得分 0
timer响应是由事件驱动的,因此在Windows Service中会出现或多或少的问题。
to c#中的thread还没用过,找找资料.
参看
http://blog.csdn.net/knight94/archive/2006/03/17/627298.aspxTop
14 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:37:50 得分 0
问题已经解决,用多线程,刚好刚才找的也是你的文档,多谢Knight94(愚翁)!!!!
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
//this.timer1.Enabled = true;
/*
timer1.Enabled = true;
timer1.Enabled = false;
timer1.Stop();
timer1.Start();
*/
Thread t1 = new Thread(new ThreadStart(ThreadFun));
t1.Start();
}
private void ThreadFun()
{
//Create invoke method by specific function
while(true)
{
Thread.Sleep(6000);
SqlConnection conn = new SqlConnection("server=clx;database=dbpstest;uid=sa;pwd=''");
conn.Open();
SqlCommand cmd = new SqlCommand("insert into stu4 values(1)" , conn);
cmd.ExecuteNonQuery() ;
}
}Top
15 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:38:44 得分 0
代码还需要改进呵,连接放在onstart中,关闭连接与停止线程放在onclose中,Top
16 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:42:56 得分 0
最后一个问题uninstall时需要服务的exe文件,假设exe文件丢失,只知道服务名如何uninstall它?Top
17 楼Knight94(愚翁)回复于 2006-05-04 12:49:54 得分 0
to 最后一个问题uninstall时需要服务的exe文件,假设exe文件丢失,只知道服务名如何uninstall它?
好像不行,必须有exe文件。Top
18 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-04 12:51:11 得分 0
收到,谢谢!~Top
19 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2006-05-05 23:22:13 得分 10
首先,确认你用了正确的Timer。整个.NET有3个Timer可用:
System.Threading.Timer
System.Timers.Timer
System.Windows.Forms.Timer
最后一个不能用于Windows Service。Top




