vs自带的命令工具,并且,如果win7或者win8,一定要是管理员身份运行
release 为window服务生成exe文件的目录,cd到这个目录,执行InstallUtil.exe service.exe
如果exe设置为自启动,这时在系统的服务应该就能看到了。
卸载服务:cmd中运行 InstallUtil.exe /u service.exe
很多人都说了windows服务的简单实用,关键代码都是注释,填写你的代码,
其实这段代码如果操作数据库的话,不知道能不能调用第三方的dll(反复试了好多次,调用第三方dll一直没成功),
反正我是手写的方法,终于实现了定时插入数据了。
以下是相对主程序(Service1.cs)的代码:
protected override void OnStart(string[] args)
{
WriteLog("Service Started at");
try
{
/*Timer构造函数参数说明:
Callback:一个 TimerCallback 委托,表示要执行的方法。
State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。*/
timerClose = new System.Threading.Timer(new TimerCallback(timerCall), this, 10000, 1000 * 3600 * 2);
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
finally
{
}
}
记得申明连接字符串,这是SQLServer的:
string strconn = "Data Source=127.0.0.1;Initial Catalog=databasename;Persist Security Info=True;User ID=sa;Password=111111";
下边这是MYSQL的:
public static string connectionString = "server=localhost;user id=root;password=qwer1234;database=shdc;persist security info=true;charset=utf8";
下边就是timerCall方法:
private void timerCall(object obj)
{
try
{
//这里做自己的处理
}
catch (Exception exp)
{
WriteLog(exp.ToString());
}
finally
{
}
}
private int InsertOil(string id, string type, string price, string date, string floatprice, string ver)
{
}
下边这是个好东西,鉴于windows服务不好调试(有人说附加到进程,我一直没成功),只好输出文字作为调试的方法了:
/// <summary>
/// 记录日志
/// </summary>
/// <param name="content"></param>
private void WriteLog(string content)
{
FileStream fs = new FileStream(@"c:\MessageService.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
StringBuilder sb = new StringBuilder();
sb.Append("msg:: ");
sb.Append(content);
sb.Append(" " + DateTime.Now.ToString() + "\n");
m_streamWriter.WriteLine(sb.ToString());
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}
最后就是服务的自启动,
双击service,打开设计视图,右键--添加安装程序:
双击ProjectInstaller.cs,能两个控件,分别设置一下属性,
下边就是写安装事件:
这个方法写在ProjectInstaller.cs中,双击ProjectInstaller.cs--右键--查看代码,具体如图:
public ProjectInstaller()
{
InitializeComponent();//自带方法
this.Committed += new InstallEventHandler(ProjectInstaller_Committed);
}
private void ProjectInstaller_Committed(object sender, InstallEventArgs e)
{
//参数(<span style="font-family: Arial, Helvetica, sans-serif;">AutoGetOil</span>)为服务的名字
System.ServiceProcess.ServiceController controller = new System.ServiceProcess.ServiceController("AutoGetOil");
controller.Start();
}
最后的最后,生成exe,要注意目标服务器的framework版本号及操作系统平台(32位还是64位),
选择版本号:右键项目---属性--应用程序---目标框架,选择就行了,看下图:
选择平台:工具栏(生成)--配置管理器--平台,选择合适的就行,见下图:
tips:关于生成及卸载
方法有二:
一:使用vs自带的【本机工具命令提示】,cd到你生成的exe文件目录,运行installutil.exe d:\autogetoil.exe即可;
二:Framework自带的installutil.exe工具,cd到C:\Windows\Microsoft.NET\Framework\v4.0.30319,运行installutil.exe d:\autogetoil.exe即可;
服务运行过程中不要修改任何代码,更不要生成,如果服务需要修改,先从服务管理器中停止此服务,再运行installutil.exe /u d:\autogetoil.exe,这时再修改代码,如果没有卸载服务就修改代码,可能会导致卸载不干净或者不能完整安装。