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/

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

  • 相关阅读:
    Oracle SQL语句大全—查看表空间
    Class to disable copy and assign constructor
    在moss上自己总结了点小经验。。高手可以飘过 转贴
    在MOSS中直接嵌入ASP.NET Page zt
    Project Web Access 2007自定义FORM验证登录实现 zt
    SharePoint Portal Server 2003 中的单一登录 zt
    vs2008 开发 MOSS 顺序工作流
    VS2008开发MOSS工作流几个需要注意的地方
    向MOSS页面中添加服务器端代码的另外一种方式 zt
    状态机工作流的 SpecialPermissions
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2350623.html
Copyright © 2011-2022 走看看