一个最简单的windows service的建立

本文介绍如何利用VS.NET在几分钟内创建Windows服务,并详细解释了步骤,包括配置Timer对象以执行周期性的数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用vs.net我们可以在几分钟之内建立其windows服务,非常简单

下面说一下步骤
1. 新建一个项目
2. 选择Windows服务
3.从工具箱的组件表当中拖动一个Timer对象到这个设计表面上,使用的的system.timer.time 
4. 设置Timer属性,Interval属性200毫秒(1秒进行5次数据库操作)
5.双击这个Timer,然后在里面写一些数据库操作的代码,比如
 SqlConnection conn=new SqlConnection("server=127.0.0.1;database=test;uid=sa;pwd=275280");
   SqlCommand comm=-new SqlCommand("insert into tb1 values ('111',11)",conn);
   conn.Open();
   comm.ExecuteNonQuery();
   conn.Close();

6. 将这个服务程序切换到设计视图
7. 右击设计视图选择“添加安装程序”
8. 切换到刚被添加的ProjectInstaller的设计视图
9. 设置serviceInstaller1组件的属性: 
    1) ServiceName = My Sample Service
    2) StartType = Automatic (开机自动运行)
10. 设置serviceProcessInstaller1组件的属性  Account = LocalSystem
11. 改变路径到你项目所在的bin/Debug文件夹位置(如果你以Release模式编译则在bin/Release文件夹)
12. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。(InstallUtil这个程序在WINDOWS文件夹/Microsoft.NET/Framework/v1.1.4322下面)
13. 右击桌面上“我的电脑”,选择“管理”就可以打计算机管理控制台
14. 在“服务和应用程序”里面的“服务”部分里,你可以发现你的Windows服务已经包含在服务列表当中了
15. 右击你的服务选择启动就可以启动你的服务了
============================

这个service设计定时器的问题
C#中有3个timer类
1.定义在System.Windows.Forms里
2.定义在System.Threading.Timer类里
3.定义在System.Timers.Timer类里

System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。

System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。

例:
使用System.Timers.Timer类
System.Timers.Timer t = new System.Timers.Timer(10000);//实例化Timer类,设置间隔时间为10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;

public void theout(object source, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show("OK!");  //不能有界面,没有反映
string path = @"e:/MyTest.txt";

            try
            {
                string textLine = "This is some text in the file." + DateTime.Now.ToString() + "/r/n";
                File.AppendAllText(path, textLine);
            }

            catch (Exception Ex)
            {
                return;
            }

 

### 创建基于VC++ 6.0的基本TCP程序 #### 使用Winsock API初始化网络编程环境 为了在Visual C++ 6.0中实现TCP通信,需要先加载Windows套接字库(Winsock)。这通常通过调用`WSAStartup()`函数完成。该函数用于启动应用程序中的Winsock DLL服务。 ```cpp #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main() { WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result != 0) { printf("WSAStartup failed with error: %d\n", result); return 1; } } ``` #### 建立服务器端监听连接 一旦成功初始化了Winsock库,则可以创建一个socket对象来作为服务器端口并绑定到特定IP地址和端口号上等待客户端请求接入。 ```cpp SOCKET ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ListenSocket == INVALID_SOCKET) { printf("Error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return 1; } struct sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("127.0.0.1"); //本地回环地址 service.sin_port = htons(27015); //指定端口 // Bind the server endpoint to the local address. bind(ListenSocket, (SOCKADDR*)&service, sizeof(service)); listen(ListenSocket, SOMAXCONN); ``` #### 接受来自客户端的消息 当有新的客户尝试建立连接时,可以通过accept()接受新连接,并读取发送过来的数据包内容。 ```cpp char recvbuf[DEFAULT_BUFLEN]; int iResult; int recvbuflen = DEFAULT_BUFLEN; // Accept a client socket SOCKET ClientSocket = accept(ListenSocket, NULL, NULL); if (ClientSocket == INVALID_SOCKET) { closesocket(ListenSocket); WSACleanup(); return 1; } // Receive until the peer shuts down the connection do { iResult = recv(ClientSocket, recvbuf, recvbuflen, 0); if (iResult > 0) { printf("Bytes received: %d\n", iResult); } else if (iResult == 0) { printf("Connection closing...\n"); } else { printf("recv failed: %d\n", WSAGetLastError()); closesocket(ClientSocket); WSACleanup(); return 1; } } while (iResult > 0); ``` #### 关闭资源释放内存 最后,在结束之前记得关闭所有打开过的sockets以及清理由`WSAStartup()`分配给应用程式的任何内部数据结构。 ```cpp // shutdown the send half of the connection since no more data will be sent shutdown(ClientSocket, SD_SEND); // cleanup closesocket(ClientSocket); WSACleanup(); return 0; ``` 上述代码片段展示了如何利用VC++ 6.0编写简单的TCP服务器[^1]。对于更复杂的应用场景可能还需要考虑错误处理机制、多线程支持等功能扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值