zoukankan      html  css  js  c++  java
  • windows 服务开发和windows install开发

    概述

         Windows 服务就是运行在windows 系统的一个进程的开发,可以把它做成一个Timer,也可以做成while循环,每隔一段时间起一个线程来运行.

         windows install开发是利用msi.dll 提供方法,来安装一个存放有安装程序目录的任务.

    windows 服务开发

    先在VS中

    image

    增加到

    image

    image

    在ProjectInstaller.cs中代码设计如下

    1
    2
    3
    4
    5
    6
    7
    8
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }
    }

    在ProjectInstaller中代码如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    partial class ProjectInstaller
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Component Designer generated code
     
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
                this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
                //
                // serviceProcessInstaller1
                //
                this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
                this.serviceProcessInstaller1.Password = null;
                this.serviceProcessInstaller1.Username = null;
                //
                // serviceInstaller1
                //
                this.serviceInstaller1.Description = "用来处理所有的异步操作,如发送邮件,发送短信";
                this.serviceInstaller1.DisplayName = "AsynchronismServices";
                this.serviceInstaller1.ServiceName = "AsynchronismService";
                this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
                //
                // ProjectInstaller
                //
                this.Installers.AddRange(new System.Configuration.Install.Installer[] {
                this.serviceProcessInstaller1,
                this.serviceInstaller1});
     
            }
     
            #endregion
     
            private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
            private System.ServiceProcess.ServiceInstaller serviceInstaller1;
        }

    windows install开发

    先定义一个MSIInstallerManager类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /// <summary>
        /// Import the windows installer dll
        /// </summary>
        internal class MSIInstallerManager
        {
            /// <summary>
            /// Indicate the WindowsInstaller UI level
            /// </summary>
            public enum INSTALLUILEVEL
            {
         
                /// <summary>
                /// authored UI with wizards, progress, errors
                /// </summary>
                INSTALLUILEVEL_FULL = 5,
            }
     
            [DllImport("msi.dll")]
            public static extern uint MsiInstallProduct(string szPackagePath, string szCommandLine);
     
            [DllImport("msi.dll", SetLastError = true)]
            public static extern int MsiSetInternalUI(INSTALLUILEVEL dwUILevel, ref IntPtr phWnd);
        }

    然后增加如下方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /// <summary>
    /// Install the specified msi file into local computer
    /// </summary>
    /// <param name="filePath">the path of specified msi file </param>
    /// <returns>if the msi file is installed successfully,return true,otherwise return false</returns>
    private bool Installfile(string filePath)
    {
        IntPtr myPtr = new IntPtr();
        MSIInstallerManager.MsiSetInternalUI(MSIInstallerManager.INSTALLUILEVEL.INSTALLUILEVEL_FULL, ref myPtr);
        ////install the specified msi file
        uint result = MSIInstallerManager.MsiInstallProduct(filePath, string.Empty);
     
        ////if the result value is 0 ,the installation will be completed successfully
        if (0 == result)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    总结

    windows服务开发一般用于win service开发,windows install开发用于sofeware update的开发.

    欢迎各位参与讨论,如果觉得对你有帮助,请点击image    推荐下,万分谢谢.

    作者:spring yang

    出处:http://www.cnblogs.com/springyangwc/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    优化cocos2d/x程序的内存使用和程序大小
    cocos2d-x移植:xcode到eclipse
    程序员在编程工作中痛苦的压抑着自己某些强烈的情绪
    C++语言的一些问题
    基数排序-图非常清晰明了
    【Cocos2d-X(1.x 2.x) 修复篇】iOS6 中 libcurl.a 无法通过armv7s编译以及iOS6中无法正常游戏横屏的解决方法
    《C++ Primer》笔记-inline内联函数
    走出你的舒适区
    UDP广播与多播
    测试问题反馈需要包含内容总结
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2350623.html
Copyright © 2011-2022 走看看