zoukankan      html  css  js  c++  java
  • windows服务

    1.左侧工具栏里有Timer控件,但是如果调用的是系统时间,就需要添加System.timer.timer空间下的控件。

    image

     

    2.服务编写之后,还不能由SCM(服务控制管理器)进行管理,需要给该服务添加装载器。在Service1.cs的设计视图,点击右键,选择“添加装载器”,系统默认就会添加ProjectInstaller.cs这个类

    image

    添加该类后,在该类的设计视图上可看到serviceInstaller1和serviceProcessInstaller1,分别设置其属性。

        设置serviceInstaller1的运行方式为手动或者自动

        设置serviceInstaller1的ServiceName,设置为什么,服务列表中就显示什么

        设置serviceProcessInstaller1的运行账号为LocalSystem

    image

     

    3.用U盘实现自动升级软件

    步骤:
    1.软件打包zip
    2.读取U盘  复制到指定位置
    3.关闭软件  解压到指定位置
    4.启动软件 删除zip

     

    3.1 解压缩 (难点)
    1.下载SharpZipLib.dll ,添加引用,添加一个解压类 UnZipClass.cs

    UnZipClass.cs

     

    3.2 (启动进程难点)

    因为启动进程的用户名是System,开启进程后,不会显示exe的界面,所以必须 【模拟用户开启进程】,调用方法

    image

    //模拟用户开启进程
    SystemUser.CreateProcess(SystemUser.WTSGetActiveConsoleSessionId(), filePath, "");

     
    SystemUser.cs

     

    3.3 获取当前工作目录(安装路径)

    开始的情况这么写是错误的。

    //获取当前工作目录
    //string CurrentDirectoryPath = Environment.CurrentDirectory + \Debug.zip;
    由于windows服务安装时,系统会自动将windows服务的程序文件复制到系统目录下,通常是System32目录下,windows服务的运行目录就是系统目录,有时候,windows服务在运行时需要知道自己的安装目录,比如,windows服务运行时所需要的一些资源文件,通常可能是一些声音或图像文件,这些资源文件是位于安装目录下的,只有windows服务知道了安装目录,才能对这些资源文件进行访问,那么windows服务如何知道自己的安装目录的信息呢,一种比较简单的做法是通过访问注册表。

    /*
    Windows服务在系统安装后会在注册表的 "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices[ServiceName]"下以服务的ServiceName建1个目录,目录中会有"ImagePath"节,这里保存的就是该服务的安装路径。
    */

            //获取注册表的ImagePath路径
            public static string GetWindowsServiceInstallPath(string ServiceName)
            {
                string key = "SYSTEM\CurrentControlSet\Services\" + ServiceName;
                string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();
                path = path.Substring(0, path.LastIndexOf("\"));
                return path;
            }

     

    3.4 开启关闭进程辅助类

     

    MyProcess.cs

     

    4.Service1.cs

    Service1.cs
  • 相关阅读:
    题解 UVA120 【煎饼 Stacks of Flapjacks】
    信息编码表示

    二叉树
    逻辑运算&位运算
    POJ2425 Ubiquitous Religions(并查集板题)
    CF1426E Rock, Paper, Scissors 题解
    POJ2478 Farey Sequence
    dubbo+zookeeper报错 KeeperErrorCode = Unimplemented for /dubbo
    代码无法提交到GitHub: Remote URL test failed: git@github.com: Permission denied (publickey)
  • 原文地址:https://www.cnblogs.com/tangge/p/3811784.html
Copyright © 2011-2022 走看看