zoukankan      html  css  js  c++  java
  • 使用C#创建一个安装向导

    VS2005集成了强大的安装程序制作工具,相信大家在使用中也确实感到方便了不少。但是,如果发布一个产品,就不能直接使用VS2005的安装程序了,因为,我们需要先将所有的程代码先进行混淆。并且,由于本人一直从事SBOADDON开发,ADDON的安装程序必须由自己创建,并最终将所有的文件嵌入进一个文件中才能在SBO中正确安装,因此,创建一个自己的安装程序势在必行。

     

    目录

    创建一个自己的安装程序,需要如下思路... 1

    下面,我们开始做一个向导... 1

    首先,在做向导时,需要创建一个WizardController... 1

    类图... 1

    说明一下每一个字段、属性和方法... 2

    代码... 2

    接下来,创建一个FormBase. 6

    类图... 6

    代码(Form.Disgner.cs中的代码略去)... 6

    如何使用InstallWizardBase. 9

     

    创建一个自己的安装程序,需要如下思路

    一、创建一个支持向导的控件。

    二、支持读取自己的嵌入资源,并COPY至目录文件夹。

    三、支持创建快捷方式、读写注册表信息、创建数据库等安装程序都支持的操作。

    以上的操作,我想放在一个基类库中完成。不妨命名为B1Plus.InstallWizardBase

    下面,我们开始做一个向导

    首先,在做向导时,需要创建一个WizardController

    类图

    说明一下每一个字段、属性和方法

    属性:

    CurIndex:当前窗体所处的索引号。

    FormsCount:所有步骤窗体的总和。

    IsFirstForm:是否是第一个窗体。

    IsLastForm:是否是最后一个窗体。

    IWBParametersInstall Wizard Base Parameters,安装向导支持的参数。

    ProgramName:所要安装的程序名。

    方法:

    AddForms():向Controller控件添加窗体实例。

    BeginWizard():启动向导。

    Dispose():清理系统资源。

    FinishWizard():完成向导。

    GoNext():执行下一步。

    GoPrev():执行上一步。

    代码

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Windows.Forms;

    using System.Collections;

     

    namespace B1Plus.InstallWizardBase

    {

        public class WizardController

        {

            private ArrayList _WizardForms = new ArrayList();

            private int _curIndex = 0;

     

            private object _IWBParameters = null;

     

            public object IWBParameters

            {

                get { return _IWBParameters; }

                set { _IWBParameters = value; }

            }

     

            public int CurIndex

            {

                get { return this._curIndex; }

            }

     

            public int FormsCount

            {

                get { return this._WizardForms.Count; }

            }

     

            #region 构造函数

            /// <summary>

            ///构造函数

            /// </summary>

            public WizardController()

            {

     

            }

            #endregion

     

            public void AddForms(FormBase formBase)

            {

                _WizardForms.Add(formBase);

                foreach (FormBase frm in _WizardForms)

                {

                    frm.controller = this;

     

                    //frm.DisableButtons();

     

                    if (this._ProgramName != null)

                        frm.Text = "欢迎使用 " + this._ProgramName + " 安装向导";

                    else

                    {

                        frm.Text = "B1Plus InstallWizard.";

                    }

                }

            }

           

            string _ProgramName = null;

            public string ProgramName

            {

                get { return this._ProgramName; }

                set { this._ProgramName = value; }

            }

     

            public bool IsFirstForm //属性

            {

                get { return _curIndex == 0; }

            }

            public bool IsLastForm //属性

            {

                get { return _curIndex == this._WizardForms.Count - 1; }

            }

     

            public void GoNext()

            {

                if (_curIndex + 1 < _WizardForms.Count)

                {

                    //((FormBase)_WizardForms[_curIndex]).Visible = false;

                    ((FormBase)_WizardForms[_curIndex]).Hide();

                    _curIndex++;

                }

                else

                {

                    return;

                }

                ((FormBase)_WizardForms[_curIndex]).DisableButtons();

                ((FormBase)_WizardForms[_curIndex]).Show();

            }

     

            public void GoPrev()

            {

                if (_curIndex - 1 >= 0)

                {

                    ((FormBase)_WizardForms[_curIndex]).Hide();

                    _curIndex--;

                }

                else

                {

                    return;

                }

                ((FormBase)_WizardForms[_curIndex]).DisableButtons();

                ((FormBase)_WizardForms[_curIndex]).Show();

            }

     

            public void BeginWizard()

            {

                ((FormBase)_WizardForms[_curIndex]).DisableButtons();

                ((FormBase)_WizardForms[0]).Show();

            }

     

            public void FinishWizard()

            {

                _curIndex = 0;

                Dispose();

            }

     

            private void Dispose()

            {

                foreach (FormBase frm in _WizardForms)

                {

                    frm.Close();

                }

                Application.Exit();

            }

        }

    }

     

    接下来,创建一个FormBase

    类图

    代码(Form.Disgner.cs中的代码略去)

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

     

    namespace B1Plus.InstallWizardBase

    {

        public partial class FormBase : Form

        {

            public WizardController controller = null;

            public FormBase()

            {

                InitializeComponent();

            }

     

            private void btnHelp_Click(object sender, EventArgs e)

            {

                this.ShowHelp();

            }

     

            protected virtual void ShowHelp()

            {

                MessageBox.Show("此步骤未包含任何帮助信息!\n请联系郭富[42319036]");

            }

     

            private void btnPre_Click(object sender, EventArgs e)

            {

                this.GoPrev();

            }

     

            private void btnNext_Click(object sender, EventArgs e)

            {

                this.GoNext();

            }

     

            private void btnStart_Click(object sender, EventArgs e)

            {

                StartInstall();

            }

     

            private void btnFinish_Click(object sender, EventArgs e)

            {

                Cancel();

            }

     

            internal void DisableButtons()

            {

                if (this.controller == null)

                    return;

                if (this.controller.IsFirstForm)

                    this.btnPre.Visible = false;

                else

                    this.btnPre.Visible = true;

                if (this.controller.IsLastForm)

                {

                    this.btnNext.Visible = false;

                    this.btnStart.Visible = true;

                }

                else

                {

                    this.btnNext.Visible = true;

                    this.btnStart.Visible = false;

                }

                this.lblStep.Text = (this.controller.CurIndex + 1).ToString() +

                    "/" + this.controller.FormsCount.ToString();

            }

     

            protected virtual void GoPrev()

            {

                this.controller.GoPrev();

            }

     

            protected virtual void GoNext()

            {

                if (this.controller.IsLastForm)

                    controller.FinishWizard();

                else

                    this.controller.GoNext();

            }

     

            protected virtual void Cancel()

            {

                this.controller = null;

                Application.Exit();

            }

     

            protected virtual void StartInstall()

            {

                MessageBox.Show("请重写此方法以执行安装!");

            }

     

            protected virtual void SetBannerInfo(string inf)

            {

                if (inf != null)

                {

                    if (inf != "")

                    {

                        this.lblBanner.Text = inf;

                        return;

                    }

                }

                this.lblBanner.Text = "完成此向导共需" +

                    this.controller.FormsCount.ToString() +

                    " 步。您现在处于第" +

                    (this.controller.CurIndex+1).ToString() +

                    " 步。";

            }

     

            private void FormBase_FormClosing(object sender, FormClosingEventArgs e)

            {

            }

        }

    }

     

    如何使用InstallWizardBase

    创建一个Windows项目,引用刚刚创建的InstallWizardBase

    然后,创建3Form,分别为Form1,Form2,Form3

    每个Form必须继承自B1Plus.InstallWizardBase.FormBase.

    如果需要确切显示Banner信息,请在Form的构造函数里调用            SetBannerInfo("第一步")方法。

    最后,修改Program.cs中的代码为:

    using System;

    using System.Collections.Generic;

    using System.Windows.Forms;

     

    namespace B1Plus.InstallWizard

    {

        static class Program

        {

            /// <summary>

            /// The main entry point for the application.

            /// </summary>

            [STAThread]

            static void Main()

            {

                Application.EnableVisualStyles();

                Application.SetCompatibleTextRenderingDefault(false);

                B1Plus.InstallWizardBase.WizardController wc = new B1Plus.InstallWizardBase.WizardController();

                wc.ProgramName = "B1Plus Reporter";

                wc.AddForms(new Form1());

                wc.AddForms(new Form2());

                wc.AddForms(new Form3());

                wc.BeginWizard();

                Application.Run();

            }

        }

    }

     

    完成!

  • 相关阅读:
    SlideShare
    准备SCJP考试
    Sun的过去
    shardingjdbc基础教程
    上万页大数据量的分页查询方案
    shardingjdbc教程 看这一篇就够了
    微服务化的认识
    JDK9对String底层存储的优化
    水平分表
    深入理解Java中的字段与属性的区别
  • 原文地址:https://www.cnblogs.com/saptechnique/p/1591227.html
Copyright © 2011-2022 走看看