1、C:WindowsMicrosoft.NETFrameworkv4.0.30319,在该路径下可以发现如下截图所示的文件:使用 InstallUtil 来完成服务的安装和卸载必须在命令行下完成:假设我们现在已经采用 C# 完成了一个服务,服务名称为 TestService.exe ,该服务所在的路径为 D:ServiceTestService.exe,那么使用 InstallUtil.exe 来完成该服务的安装和卸载过程如下:在命令行下运行下面三条命令即可:1. 定位到 InstallUtil 所在目录:WindowsMicrosoft.NETFrameworkv4.0.30319 2. 执行
2、 TestService.exe 服务的安装:InstallUtil D:ServiceTestService.exe 3. 执行 TestService.exe 服务的卸载:InstallUtil /u D:ServiceTestService.exe服务启动和停止服务的启动和停止则可以在服务控制台管理器中实现,打开服务控制台管理器的简单方式:运行 services.msc 命令即可。服务中定时器的使用: 1: / 2: / 定义定时器 3:/summary 4: private System.Timers.Timer myTimer; / 服务启动时触发的事件param name=args
3、 5: protected override void OnStart(string args) 6: 7: Debug.WriteLine(MyService Is Started !); 8: 9: myTimer = new System.Timers.Timer(3000); 10: 11: myTimer.Elapsed += Timer_Tick; 12: myTimer.Interval = 3000; 13: myTimer.Enabled = true; 14: / 定时器回调处理例程sourcee private void Timer_Tick(object source,
4、 System.Timers.ElapsedEventArgs e)In Timer_Tick ! /停掉定时器 myTimer.Enabled = false;Out Timer_Tick !服务调试:服务的调试是比较变态的,方法貌似也还是有几种,不过我呢,反正也就知道下面一种而已,个人觉得这种方式也还用得下去,即调试起来感觉还不错的 !1. 首先在你的服务源代码中添加一个定时器,定时器的示例代码如上所示。2. 在服务的 Start 事件中启动定时器,并且将定时器设置为可用状态。3. 在服务中添加如下代码:(我的定时器为 3 秒钟,所以 15 秒后就会执行 Debug.WriteLine 了
5、) private Int32 nCount = 0; nCount+; if (nCount = 5)3. 编译和安装好服务。4. 下断点。5. 在服务控制台管理器中启动服务。6. 以下操作必须在 15 秒内完成,否则无法进入调试状态(因为 Debug.WriteLine 已经执行完了)。7. VS2010 中 “工具 附加到进程”。8. 选择好服务所在的进程(我这里的服务进程为 WorkTracker.Service.exe),然后单击附加后就慢慢等待 15 秒钟的过去吧。9. 15 秒到达时,我们的服务就会进入到调试状态了,然后再 VS 中就可以来调试服务了。VC+/MFC 部分:设置窗
6、口透明度:在对话框的 OnInitDialog 处理例程中添加以下代码即可: /设置窗体透明度,120 是透明度,范围是 0255 :SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);SetLayeredWindowAttributes(m_hWnd, 0, 215, LWA_ALPHA);设置窗口背景颜色:1. 首先给对话框类(我这里是 CAboutDialog 类)中添加以下私有成员变量: private: CBrush m_brush;2. 然后在 CAboutDi
7、alog 类的构造函数中初始化 m_brush 成员变量: CAboutDialog:CAboutDialog(CWnd* pParent /*=NULL*/) : CDialogEx(CAboutDialog:IDD, pParent) this-m_brush.CreateSolidBrush(RGB(200, 245, 142); 3. 再在 CAboutDialog 的 OnCtlColor 处理例程中修改为: HBRUSH CAboutDialog:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) HBRUSH hbr = CDialo
8、gEx:OnCtlColor(pDC, pWnd, nCtlColor); /只有当是对话框窗体时,才将画刷设置为 m_brush /对于一些其他的控件之类的则不操作,即使用预定义背景色 if(nCtlColor = CTLCOLOR_DLG) return this-m_brush; / TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr;MFC 中使用 PNG 图片: /从资源文件中读取出 PNG 格式的图片,并且将该图片转换为 Bitmap,然后显示在指定 ID 的控件上 void CAboutDialog:SetResourceImageToCtrl(LPCTS
9、TR lpszImgType, int nCtrlCode, int nImgResourceID) CImage cImg; HRSRC hRsrc = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nImgResourceID), lpszImgType); if(NULL != hRsrc) HGLOBAL hImgData = LoadResource(AfxGetResourceHandle(), hRsrc); if(NULL != hImgData) LPSTREAM lpStream = NULL; LPVOID lp
10、Void = LockResource(hImgData); DWORD dwSize = SizeofResource(AfxGetResourceHandle(), hRsrc); 15: HGLOBAL hAllocate = GlobalAlloc(GHND, dwSize); 16: LPBYTE lpByte = (LPBYTE)GlobalLock(hAllocate); 17: memcpy(lpByte, lpVoid, dwSize); 18: GlobalUnlock(hAllocate); 19: 20: HRESULT hResult = CreateStreamOn
11、HGlobal(hAllocate, TRUE, &lpStream); 21: if(S_OK = hResult) 22: 23: cImg.Load(lpStream); 25: HBITMAP hBitmap = cImg.Detach(); 27: (CButton *)GetDlgItem(nCtrlCode)-SetBitmap(hBitmap); 28: 30: GlobalFree(hAllocate); 31: FreeResource(hImgData); 32: 33: 34:该函数的调用代码为: SetResourceImageToCtrl(TEXT(PNG), ID
12、C_LOG_BTN, IDB_PNG1);设置窗口图标: BOOL CInstallSvcDlg:OnInitDialog() CDialogEx:OnInitDialog(); /设置窗体上的窗口图标为 IDI_ICON1 HICON hIcon=AfxGetApp()-LoadIcon(IDI_ICON1); SetIcon(hIcon, FALSE); / 设置小图标 SetIcon(hIcon, TRUE); / 设置大图标 /设置窗体透明度,120 是透明度,范围是 0255 InitControl(); return TRUE; / 除非将焦点设置到控件,否则返回 TRUE设置 E
13、XE 图标:这个可以很轻松的实现,就需要进入 Resource.h 中修改就可以了,比如在我的项目中,有一个资源 IDI_ICON1 ,我需要将该资源设置为我的 EXE 的图标,方法是打开 Resource.h ,并且对其中的 IDI_ICON1 的值进行修改,使得该值小于 IDR_MAINFRAME 的值,然后编译好程序后就可以看到图标已经改变了(这里有一个 Bug,有时候你重新生成后,你在 Release 下会看到你的 EXE 的图标还是默认的 MFC 图标,你可以尝试着将这个 EXE 拷贝到桌面上,你会发现拷贝过去以后 EXE 图标就变成你自己所定义的图标了)。而 Debug 下看到的是
14、你所设置的图标是正确的。设置 EXE 文件属性:所谓的文件属性就是如下面得东西:上面的信息的修改可以直接在资源文件中修改,在打开的文件中直接修改代码即可,示例如下:附加我的 InstallSvc:该工具可以用来实现普通服务的安装,也可以实现 NT 式驱动程序的安装,有了这个工具的话,在开发服务程序的时候就不需要再使用前面的那些招数了,太麻烦了,而且也方便了以后内核代码的安装,运行之类的,也算是有点小作用吧。关于这个工具的实现呢,其实我以前就发过一篇博文的,那篇博文是将 SCM 封装进了 C# 类,所以完全可以使用哪个类来开发一个 C# 版本的 InstallSvc,这篇博文的链接为:有兴趣的可以去看看,哪个类自己觉得写得还不错,我的工具的截图为:该工具在 XP 以及低版本操作系统下,显示得不怎么滴,在关于对话框中的图片显示很有问题的,估计是 Bitmap 不支持透明或者在 PNG 转换为 Bitmap 时出问题了吧 !下载 InstallSvc.zip 版权所有,欢迎转载,但转载请注明: 转载自 Zachary.XiaoZhen - 梦想的天空
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1