C#: 关 于 Windows Services 的 几 个 疑 问 , 请 帮 解 答 一 下

KaKaKaKa 2009-05-03 01:26:16
C#:
我创建了个Windows Services项目,代码很简单:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;

namespace NewTest
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
thd = new Thread(new ThreadStart(Run));
}
Thread thd;

protected override void OnStart(string[] args)
{
thd.Start();
}

void Run()
{
while (true)
{
MessageBox.Show("我这里需要显示输出。");
Thread.Sleep(10*1000);

}
}
}
}



服务也成功安装了,但在启动服务后却未出现预期的MessageBox显示出来啊。。 怎么回事啊?
是不是跟System.Windows.Forms相关的在Service里都不支持啊 我在MessageBox那段里需要显式的输出一些东西。
请详示,谢谢。
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojing7 2009-05-03
  • 打赏
  • 举报
回复
WERSERVERS里面怎么可能会出现IDE界面啊
你可以输出JS的LAERT()来提示
xuzysun 2009-05-03
  • 打赏
  • 举报
回复
路过,学习!!
KaKaKaKa 2009-05-03
  • 打赏
  • 举报
回复
好象不能处理 Form里才可以
KaKaKaKa 2009-05-03
  • 打赏
  • 举报
回复
谢谢1楼的回答,我明白了。 我现在还有个疑问:我想在Windows Services里注册键盘事件,可以么?
我看了 Windows Services里 根本没有WndProc啊,而我注册键盘事件是需要处理Windows消息的 请问有好的方法么?
举个例子:我在Services里要求:当按了F4后 就自动将一段文本信息写进C:\a.txt里。
这里处理Windows消息该怎么处理,谢谢。
小弟万元户 2009-05-03
  • 打赏
  • 举报
回复
学习。。。
周公 2009-05-03
  • 打赏
  • 举报
回复
windows service的创建和调试
1 什么是Windows服务

Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。

2 创建一个Windows服务

我们即将创建的这个服务是用来监视文件是否被改动的,只要指定的目录下的文件被改动,都会记入日志的。下面就让我们来创建这个Windows服务。

Visual Studio .NET能够使创建一个Windows服务变成相当简单的一件事情。(1)打开Visual Studio.net

(2)新建一个Windows服务项目,选取“Visual C#”项目,然后在选取Windows服务模板

(3)将项目名称设置为WatchFileService单击确定

(4)将Service1.cs重命名为WatchFile.cs

(5)转到WatchFile.cs的设计画面,设置属性窗口中的ServiceName属性为WatchFileService,并从工具——〉组件中拖放FileSystemWatcher和EventLog到设计画面,拖放后的结果,如图:



(6)设置fileSystemWatcher1的Filter属性为*.txt,Path属性为c:\temp

(7)设置eventLog1的source属性为fileSystem-Watcher1

(8)双击fileSystemWatcher1,添加如下代码:

private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)

{

eventLog1.WriteEntry(e.Name + " 这个文件在:"+DateTime.Now.ToString() + “ 被改动了!”);

}


3 使用Installer类

(1)将WatchFile.cs切换到设计画面,在WatchFile的属性窗口下方按下“添加安装程序”选项。VS.net会自动添加一个ProjectInstaller.cs文件,这个文件的设计画面包含两个控件——serviceProcessInstaller1和serviceInstaller1,画面如图



(2)设置serviceProcessInstaller1控件的Account属性为“LocalSystem”

(3)编译这个项目,可以在项目的bin\debug目录下找到WatchFileService.exe的文件

3 安装Windows 服务

(1)进入命令提示符模式,开始菜单——〉程序——〉Micosoft Visual Sdudio.net2003——〉Visual Sdudio.net工具——〉Visual Sdudio.net 2003命令提示

(2)在命令提示下进入项目文件夹\bin\debug目录

(3)输入installutil WatchFileService.exe,安装服务成功,结果如图



(4)若要删除这个服务,则输入installutil /u WatchFileService.exe

4 设置服务为自动启动

将ProjectInstaller.cs转到设计状态,修改serviceInstaller1组件的StartType属性为Automatic,这样服务安装后,当操作系统重新启动后,服务就会自动启动。

5 调试Windows服务

从另外的角度度看,调试Windows服务绝不同于一个普通的应用程序。调试Windows服务要求的步骤更多。服务不能象你对普通应用程序做的那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动,这一点在前面部分我们已经做到了。为了便于跟踪调试代码,一旦服务被启动,你就要用Visual Studio把运行的进程附加进来(attach)。记住,对你的Windows服务做的任何修改都要对这个服务进行卸载和重安装。

6 附加正在运行的Windows服务

( 为了调试程序,有些附加Windows服务的操作说明。这些操作假定你已经安装了这个Windows服务并且它正在运行。

(1)用Visual Studio装载这个项目

(2)点击“调试”菜单

(3)点击“进程”菜单

(4)确保 显示系统进程 被选

(5)在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它

(6)点击 附加 按钮

(7)点击 确定

(8)点击 关闭

(9)在fileSystemWatcher1_Changed方法里设置一个断点,然后等它执行)



估计很多人对原文处的这个地方存在疑问,原因就在于,如果你是用Release模式生成的,将无法调试。

下面我将我自己的调试过程给大家看一下.

调试Service 启动Visual Studio 2005,打开yourService project.选择菜单"Debug->Attach to Process..."。

在Attach to Process窗口里attach yourSerice.exe。如果你看不到yourSerice.exe,请选中"Show processes from all users".这样你才能看到以system账号运行的Service. 如果你已经设置了断点,当Serice运行到你设置的断点时,程序就会停下来等待你的调试。

为了能够调试yourService.exe, yourService.exe必须是在Debug模式下编译的

7 效果

(1)在c:\temp目录下新建一个文本文件,并编辑该文件

(2)打开事件查看器工具中的应用程序日志,可以看到有日志项目生成,
周公 2009-05-03
  • 打赏
  • 举报
回复
在Windows Service中默认是不会出现GUI界面的。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧