zoukankan      html  css  js  c++  java
  • (C#) Windows Service,及一个helper类。

    (C#) Windows Service - Basic

    Using Microsoft Visual Studio or the Microsoft .NET Framework SDK, you can easily create services by creating an application that is installed as a service. This type of application is called a Windows Service. With framework features, you can create services, install them, and start, stop, and otherwise control their behavior.

    1. Windows Service Applications

    A service can exist in one of three basic states:

    - Running
    - Paused
    - Stopped

    The Service can alos reprot the state of a pending command:

    - ContinuePending,
    - PausePending
    - StartPending
    - StopPending


    These statusesndeicate that a command has been issued , such as a command to pause a running service , but has not been carried out yet.
    You can query the Stauts to determine what state a service is in, or use the WaitForStatus to carry out an action when any of these states occurs.

    Type of Services

    - Win32OwnProcess
    - Win32ShareProcess

    2. Create Windows Services

    如何创建Windows服务

    3. 调试Windows Services.

    MSDN上面已经将的很详细了,这里简单归纳如下:

    1) 添加Installer :  即在Service项目上View Designer,然后在Designer上面的空白区域右击后选择 Add Installer

    2) 配置ServiceInstall1 的属性:ServiceName (注意:必须和我们创建的服务的属性中的ServiceName完全一样)

    3) 安装服务:Build Solution后,在生成的MyProject.exe目录下面,运行 InstallUtil.exe MyProject.exe 

    4) 启动服务,挂起调试: 选择Debug->Attach to Process 后,进行调试。

    参考: http://msdn.microsoft.com/zh-cn/library/9k985bc9(v=vs.90).aspx

    4.记录使用一个Service helper类来完成 Windows Service的安装和启动。

    1). 在WPF的button clieck方法中,安装一个Service

            private void btnRemove_Click(object sender, RoutedEventArgs e)
            {
                this.tbkMessage.Text = "Usb registry service is installing..."; 
                ServiceHelper.StartService();
                this.tbkMessage.Text = "Usb registry service is installed and starting..."; 
            }

    2)serviceHelper类.

    
    namespace UsbRegistryCleanUp
    {
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        using System.IO;
        using System.Windows.Forms;
        using System.ServiceProcess;
        using System.Configuration.Install; 
    
        public static class ServiceHelper
        {
            private const string SERVICE_NAME = "UsbRegistryCleaner";
            private const string SERVICE_FILE_NAME = "UsbRegistryCleaner.exe";
            private const string APPLICATION_TITLE = "Usb register cleaner";
            private const string SERVICE_FILE_NOT_EXIST = "Service file does not exist.";
            private const string INSTALL_SERVICE_ERROR = "Error found durring service installatin.";
            private const string UNINSTALL_SERVICE_ERROR = "Error found during service uninstallation.";
    
            /// <summary>
            /// Get the path of the service file.
            /// </summary>
            /// <returns></returns>
            private static string GetServiceFilePath()
            {
                return Path.Combine(Application.StartupPath, SERVICE_FILE_NAME);
            }
    
            /// <summary>
            /// Check whether the service file exists or not.
            /// </summary>
            /// <returns></returns>
            private static bool IsServiceFileExists()
            {
                return File.Exists(GetServiceFilePath());
            }
    
            /// <summary>
            /// Display the error message.
            /// </summary>
            /// <param name="errMsg"></param>
            private static void OOPS(string errMsg)
            {
                MessageBox.Show(errMsg, APPLICATION_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    
            /// <summary>
            /// Start service.
            /// </summary>
            public static bool StartService()
            {
                if (!IsWindowsServiceInstalled(SERVICE_NAME))
                {
                    if (InstallService() == false)
                        return false;
                }
    
                ServiceController sc = new ServiceController(SERVICE_NAME);
                if (sc.Status != ServiceControllerStatus.Running)
                    sc.Start();
    
                return true;
            }
    
            /// <summary>
            /// Stop service.
            /// </summary>
            private static void StopService()
            {
                if (!IsWindowsServiceInstalled(SERVICE_NAME))
                {
                    if (InstallService() == false)
                        return;
                }
    
                ServiceController sc = new ServiceController(SERVICE_NAME);
                if (sc.Status != ServiceControllerStatus.Stopped)
                    sc.Stop();
            }
    
            /// <summary>
            /// Check whether the service has been installed or not.
            /// </summary>
            /// <param name="serviceName"></param>
            /// <returns></returns>
            private static bool IsWindowsServiceInstalled(string serviceName)
            {
                ServiceController[] services = ServiceController.GetServices();
                foreach (ServiceController service in services)
                {
                    if (string.Equals(service.ServiceName, serviceName, StringComparison.InvariantCultureIgnoreCase))
                        return true;
                }
                return false;
            }
    
            /// <summary>
            /// Install service.
            /// </summary>
            /// <returns></returns>
            private static bool InstallService()
            {
                if (!IsServiceFileExists())
                {
                    OOPS(SERVICE_FILE_NOT_EXIST);
                    return false;
                }
    
                try
                {
                    string[] cmdline = {};
                    TransactedInstaller transactedInstaller = new TransactedInstaller();
                    AssemblyInstaller assemblyInstaller = new AssemblyInstaller(GetServiceFilePath(), cmdline);
                    transactedInstaller.Installers.Add(assemblyInstaller);
                    transactedInstaller.Install(new System.Collections.Hashtable());
                }
                catch (Exception ex)
                {
                    OOPS(INSTALL_SERVICE_ERROR + ex.Message);
                    return false;
                }
    
                return true;
            }
    
            /// <summary>
            /// Uninstall the service.
            /// </summary>
            /// <returns></returns>
            public static bool UninstallService()
            {
                if (!IsWindowsServiceInstalled(SERVICE_NAME))
                    return true;
    
                StopService();
    
                if (!IsServiceFileExists())
                {
                    OOPS(SERVICE_FILE_NOT_EXIST);
                    return false;
                }
    
                try
                {
                    string[] cmdline = {};
                    TransactedInstaller transactedInstaller = new TransactedInstaller();
                    AssemblyInstaller assemblyInstaller = new AssemblyInstaller(GetServiceFilePath(), cmdline);
                    transactedInstaller.Installers.Add(assemblyInstaller);
                    transactedInstaller.Uninstall(null);
                }
                catch (Exception ex)
                {
                    OOPS(UNINSTALL_SERVICE_ERROR + ex.Message);
                    return false;
                }
    
                return true;
            }
        }
    }
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/fdyang/p/2868870.html
Copyright © 2011-2022 走看看