windows 服务Word文档下载推荐.docx
《windows 服务Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《windows 服务Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
C:
\Windows\Microsoft.NET\Framework\v4.0.30319,
在该路径下可以发现如下截图所示的文件:
使用InstallUtil来完成服务的安装和卸载必须在命令行下完成:
假设我们现在已经采用C#完成了一个服务,服务名称为TestService.exe,
该服务所在的路径为D:
\Service\TestService.exe,
那么使用InstallUtil.exe来完成该服务的安装和卸载过程如下:
在命令行下运行下面三条命令即可:
1.定位到InstallUtil所在目录:
\Windows\Microsoft.NET\Framework\v4.0.30319
2.执行TestService.exe服务的安装:
InstallUtilD:
\Service\TestService.exe
3.执行TestService.exe服务的卸载:
InstallUtil/uD:
\Service\TestService.exe
服务启动和停止
服务的启动和停止则可以在服务控制台管理器中实现,
打开服务控制台管理器的简单方式:
运行services.msc命令即可。
服务中定时器的使用:
1:
///<
summary>
2:
///定义定时器
3:
/summary>
4:
privateSystem.Timers.TimermyTimer;
///服务启动时触发的事件
paramname="
args"
>
<
/param>
5:
protectedoverridevoidOnStart(string[]args)
6:
{
7:
Debug.WriteLine("
MyServiceIsStarted!
"
);
8:
9:
myTimer=newSystem.Timers.Timer(3000);
10:
11:
myTimer.Elapsed+=Timer_Tick;
12:
myTimer.Interval=3000;
13:
myTimer.Enabled=true;
14:
}
///定时器回调处理例程
source"
e"
privatevoidTimer_Tick(objectsource,System.Timers.ElapsedEventArgse)
InTimer_Tick!
//停掉定时器
myTimer.Enabled=false;
OutTimer_Tick!
服务调试:
服务的调试是比较变态的,方法貌似也还是有几种,
不过我呢,反正也就知道下面一种而已,个人觉得这种方式也还用得下去,即调试起来感觉还不错的!
1.首先在你的服务源代码中添加一个定时器,定时器的示例代码如上所示。
2.在服务的Start事件中启动定时器,并且将定时器设置为可用状态。
3.在服务中添加如下代码:
(我的定时器为3秒钟,所以15秒后就会执行Debug.WriteLine了)
privateInt32nCount=0;
nCount++;
if(nCount==5)
3.编译和安装好服务。
4.下断点。
5.在服务控制台管理器中启动服务。
6.以下操作必须在15秒内完成,否则无法进入调试状态(因为Debug.WriteLine已经执行完了)。
7.VS2010中“工具–>
附加到进程”。
8.选择好服务所在的进程(我这里的服务进程为WorkTracker.Service.exe),然后单击附加后就慢慢等待15秒钟的过去吧。
9.15秒到达时,我们的服务就会进入到调试状态了,然后再VS中就可以来调试服务了。
VC++/MFC部分:
设置窗口透明度:
在对话框的OnInitDialog处理例程中添加以下代码即可:
//设置窗体透明度,120是透明度,范围是0~255
:
:
SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
SetLayeredWindowAttributes(m_hWnd,0,215,LWA_ALPHA);
设置窗口背景颜色:
1.首先给对话框类(我这里是CAboutDialog类)中添加以下私有成员变量:
private:
CBrushm_brush;
2.然后在CAboutDialog类的构造函数中初始化m_brush成员变量:
CAboutDialog:
CAboutDialog(CWnd*pParent/*=NULL*/)
:
CDialogEx(CAboutDialog:
IDD,pParent)
{
this->
m_brush.CreateSolidBrush(RGB(200,245,142));
}
3.再在CAboutDialog的OnCtlColor处理例程中修改为:
HBRUSHCAboutDialog:
OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
HBRUSHhbr=CDialogEx:
OnCtlColor(pDC,pWnd,nCtlColor);
//只有当是对话框窗体时,才将画刷设置为m_brush
//对于一些其他的控件之类的则不操作,即使用预定义背景色
if(nCtlColor==CTLCOLOR_DLG)
{
returnthis->
m_brush;
}
//TODO:
如果默认的不是所需画笔,则返回另一个画笔
returnhbr;
MFC中使用PNG图片:
//从资源文件中读取出PNG格式的图片,并且将该图片转换为Bitmap,然后显示在指定ID的控件上
voidCAboutDialog:
SetResourceImageToCtrl(LPCTSTRlpszImgType,intnCtrlCode,intnImgResourceID)
CImagecImg;
HRSRChRsrc=FindResource(AfxGetResourceHandle(),MAKEINTRESOURCE(nImgResourceID),lpszImgType);
if(NULL!
=hRsrc)
HGLOBALhImgData=LoadResource(AfxGetResourceHandle(),hRsrc);
if(NULL!
=hImgData)
{
LPSTREAMlpStream=NULL;
LPVOIDlpVoid=LockResource(hImgData);
DWORDdwSize=SizeofResource(AfxGetResourceHandle(),hRsrc);
15:
HGLOBALhAllocate=GlobalAlloc(GHND,dwSize);
16:
LPBYTElpByte=(LPBYTE)GlobalLock(hAllocate);
17:
memcpy(lpByte,lpVoid,dwSize);
18:
GlobalUnlock(hAllocate);
19:
20:
HRESULThResult=CreateStreamOnHGlobal(hAllocate,TRUE,&
lpStream);
21:
if(S_OK==hResult)
22:
{
23:
cImg.Load(lpStream);
25:
HBITMAPhBitmap=cImg.Detach();
27:
((CButton*)GetDlgItem(nCtrlCode))->
SetBitmap(hBitmap);
28:
}
30:
GlobalFree(hAllocate);
31:
FreeResource(hImgData);
32:
}
33:
34:
该函数的调用代码为:
SetResourceImageToCtrl(TEXT("
PNG"
),IDC_LOG_BTN,IDB_PNG1);
设置窗口图标:
BOOLCInstallSvcDlg:
OnInitDialog()
CDialogEx:
OnInitDialog();
//设置窗体上的窗口图标为IDI_ICON1
HICONhIcon=AfxGetApp()->
LoadIcon(IDI_ICON1);
SetIcon(hIcon,FALSE);
//设置小图标
SetIcon(hIcon,TRUE);
//设置大图标
//设置窗体透明度,120是透明度,范围是0~255
InitControl();
returnTRUE;
//除非将焦点设置到控件,否则返回TRUE
设置EXE图标:
这个可以很轻松的实现,就需要进入Resource.h中修改就可以了,
比如在我的项目中,有一个资源IDI_ICON1,我需要将该资源设置为我的EXE的图标,
方法是打开Resource.h,并且对其中的IDI_ICON1的值进行修改,使得该值小于IDR_MAINFRAME的值,
然后编译好程序后就可以看到图标已经改变了(这里有一个Bug,
有时候你重新生成后,你在Release下会看到你的EXE的图标还是默认的MFC图标,
你可以尝试着将这个EXE拷贝到桌面上,你会发现拷贝过去以后EXE图标就变成你自己所定义的图标了)。
而Debug下看到的是你所设置的图标是正确的。
设置EXE文件属性:
所谓的文件属性就是如下面得东西:
上面的信息的修改可以直接在资源文件中修改,
在打开的文件中直接修改代码即可,示例如下:
附加我的InstallSvc:
该工具可以用来实现普通服务的安装,也可以实现NT式驱动程序的安装,
有了这个工具的话,在开发服务程序的时候就不需要再使用前面的那些招数了,太麻烦了,
而且也方便了以后内核代码的安装,运行之类的,也算是有点小作用吧。
关于这个工具的实现呢,其实我以前就发过一篇博文的,那篇博文是将SCM封装进了C#类,
所以完全可以使用哪个类来开发一个C#版本的InstallSvc,
这篇博文的链接为:
有兴趣的可以去看看,哪个类自己觉得写得还不错の,
我的工具的截图为:
该工具在XP以及低版本操作系统下,显示得不怎么滴,
在关于对话框中的图片显示很有问题的,估计是Bitmap不支持透明或者在PNG转换为Bitmap时出问题了吧!
下载InstallSvc.zip
版权所有,欢迎转载,但转载请注明:
转载自Zachary.XiaoZhen-梦想的天空