• 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/

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

  • 相关阅读:
    gcc 编译器常用的命令行参数一览
    linux下源代码分析和阅读工具比较
    Linux系统——C/C++开发工具及环境搭建
    GDB调试——经验总结
    gdb调试的艺术——Debug技巧
    命令__cp、scp(Secure Copy)
    常用shell脚本命令
    命令__查找、替换、删除
    UltraEdit 删除空行
    命令__shell数字-字符串比较
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2350623.html
Copyright © 2020-2023  润新知