65.9K
CodeProject 正在变化。 阅读更多。
Home

创建自定义设置的步骤

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.30/5 (21投票s)

2005年9月20日

3分钟阅读

viewsIcon

235338

downloadIcon

1937

如果您曾经觉得创建自定义安装应该是一件容易的事,那么这里有一些破冰的技巧。

引言

这正是我在刚开始创建自定义安装时想要找到的文章。我能找到的信息零散地分布在万维网各处。我只能依赖算法的片段,并花费了我宝贵的时间来弄清楚实际的业务流程。这就是为什么我最终决定写这篇综合文章。其中的难点在于自定义操作和用户界面部分。我如何配置一个 UI 对话框,以及如何将用户在这些对话框中输入的信息关联到一段代码,以便根据这些信息执行我想要的自定义配置?

这里有一个简单的方法可以做到这一点

主流程

步骤 1

最佳实践是创建一个全新的程序集,用于在安装程序运行时创建个性化的自定义步骤,即 InstallHelper-s。

第二步

选择您的策略

策略 1

创建一个控制台应用程序项目(我将其命名为 InstallHelperVers1),并在 InstallHelperVers1 主入口点的 args[] 数组中接收自定义值。

/// <SUMMARY>
/// The main entry point for the application.
/// </SUMMARY>
[STAThread]
static void Main(string[] args)
{
    string sz1 = args[0];
    string sz2 = args[1];

    Console.WriteLine("First option = " + sz1);
    Console.WriteLine("Second option = " + sz2);
}

构建项目并将其添加到文件系统部分。通过选择 InstallHelperVers1 应用程序添加自定义操作。打开新添加程序的属性窗口,并在参数部分使用 "[" 和 "]" 字符填写参数。自定义对话框字段值如下:

其中 EDITA1EDITA2 是您之前在属性窗口的 Edit1PropertyEdit2Property 的自定义对话框文本框中配置的值。其余属性可以保留其默认值。

结果:在安装过程中,InstallHelperVers1 将会带有所述参数被执行。

策略 2

创建一个类库应用程序项目(我将其命名为 InstallHelperVers2)。添加一个新项并选择一个安装程序类。

覆盖 OnBeforeInstall 事件或更适合您需求的事件。这里是 MSDN 关于如何做的示例:

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;

// Set 'RunInstaller' attribute to true.
[RunInstaller(true)]
public class MyInstallerClass: Installer
{
   public MyInstallerClass() :base()
   {
      // Attach the 'Committed' event.
      this.Committed += new InstallEventHandler(MyInstaller_Committed);
      // Attach the 'Committing' event.
      this.Committing += new InstallEventHandler(MyInstaller_Committing);

   }
   // Event handler for 'Committing' event.
   private void MyInstaller_Committing(object sender, InstallEventArgs e)
   {
      Console.WriteLine("");
      Console.WriteLine("Committing Event occured.");
      Console.WriteLine("");
   }
   // Event handler for 'Committed' event.
   private void MyInstaller_Committed(object sender, InstallEventArgs e)
   {
      Console.WriteLine("");
      Console.WriteLine("Committed Event occured.");
      Console.WriteLine("");
   }
   // Override the 'Install' method.
   public override void Install(IDictionary savedState)
   {
      base.Install(savedState);
   }
   // Override the 'Commit' method.
   public override void Commit(IDictionary savedState)
   {
      base.Commit(savedState);
   }
   // Override the 'Rollback' method.
   public override void Rollback(IDictionary savedState)
   {
      base.Rollback(savedState);
   }
   public static void Main()
   {
      Console.WriteLine("Usage : installutil.exe Installer.exe ");
   }
}

Context.Parameters.Keys 数组中接收自定义值。构建项目并将其添加到文件系统部分。通过选择 InstallHelperVers2 应用程序添加自定义操作。打开新添加程序的属性窗口,并在 CustomActionData 部分使用 "[" 和 "]" 字符来指定字段,使用 "/" 字符来指定每个参数。自定义对话框字段值如下:

其中 e1e2 是您从安装程序类中寻址的键:string firstEdit = Context.Parameters["e1"];,而 EDITA1EDITA2 是您之前在属性窗口的 Edit1PropertyEdit2Property 的自定义对话框文本框中配置的值,如下所示:

如果您想查看可用的参数(已键入或自定义),请使用此代码:

foreach (string keyValue in Context.Parameters.Keys)
{
  Console.WriteLine(keyValue + " = " + Context.Parameters[keyValue]);
}

在这种情况下,将 InstallerClass 设置为 TRUE 至关重要。其余属性可以保留其默认值。

结果:在安装过程中,InstallHelperVers2 将会被执行。找到安装程序类并执行您的安装程序类中重写的任何内容。

策略 3

重复策略 2 的步骤,但做一些更改:将 InstallHelperVers3 创建为一个简单的 Windows 应用程序项目。在该项目中添加一个安装程序类。忘掉所有关于设置对话框的内容,并在设置项目中只使用最少的对话框,主要的和推荐的对话框是:欢迎对话框和安装文件夹对话框(可能还有客户信息对话框)。

对于您其余的自定义步骤,只需遵循下面的流程:

  1. 在您的安装程序类中创建一个 trycatch … 事务;在 catch 部分,如果一切出错,则回滚安装。
  2. 在您的 InstallHelper 项目中创建一个简单的 Windows Forms,该 Forms 遵循设置的主流程(后退和上一步按钮、提交方法等)。
  3. try 部分内部调用这些 Forms。
  4. 在安装过程中调用此构建时,不要使用任何参数,因为您已将整个业务逻辑转移到 InstallHelper 中。

结果:在安装过程中,InstallHelperVers3 将会被执行。找到安装程序类并执行您的安装程序类中重写的任何内容,这就是您自己的设置流程。

就是这样!就是这么简单!从现在开始,发挥您的想象力来使这个场景变得复杂。

祝您好运!

© . All rights reserved.