创建自定义设置的步骤






3.30/5 (21投票s)
2005年9月20日
3分钟阅读

235338

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 应用程序添加自定义操作。打开新添加程序的属性窗口,并在参数部分使用 "[" 和 "]" 字符填写参数。自定义对话框字段值如下:
其中 EDITA1
和 EDITA2
是您之前在属性窗口的 Edit1Property
和 Edit2Property
的自定义对话框文本框中配置的值。其余属性可以保留其默认值。
结果:在安装过程中,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 部分使用 "[" 和 "]" 字符来指定字段,使用 "/" 字符来指定每个参数。自定义对话框字段值如下:
其中 e1
和 e2
是您从安装程序类中寻址的键:string firstEdit = Context.Parameters["e1"];
,而 EDITA1
和 EDITA2
是您之前在属性窗口的 Edit1Property
和 Edit2Property
的自定义对话框文本框中配置的值,如下所示:
如果您想查看可用的参数(已键入或自定义),请使用此代码:
foreach (string keyValue in Context.Parameters.Keys)
{
Console.WriteLine(keyValue + " = " + Context.Parameters[keyValue]);
}
在这种情况下,将 InstallerClass
设置为 TRUE
至关重要。其余属性可以保留其默认值。
结果:在安装过程中,InstallHelperVers2 将会被执行。找到安装程序类并执行您的安装程序类中重写的任何内容。
策略 3
重复策略 2 的步骤,但做一些更改:将 InstallHelperVers3 创建为一个简单的 Windows 应用程序项目。在该项目中添加一个安装程序类。忘掉所有关于设置对话框的内容,并在设置项目中只使用最少的对话框,主要的和推荐的对话框是:欢迎对话框和安装文件夹对话框(可能还有客户信息对话框)。
对于您其余的自定义步骤,只需遵循下面的流程:
- 在您的安装程序类中创建一个
try
…catch
… 事务;在catch
部分,如果一切出错,则回滚安装。 - 在您的 InstallHelper 项目中创建一个简单的 Windows Forms,该 Forms 遵循设置的主流程(后退和上一步按钮、提交方法等)。
- 在
try
部分内部调用这些 Forms。 - 在安装过程中调用此构建时,不要使用任何参数,因为您已将整个业务逻辑转移到 InstallHelper 中。
结果:在安装过程中,InstallHelperVers3 将会被执行。找到安装程序类并执行您的安装程序类中重写的任何内容,这就是您自己的设置流程。
就是这样!就是这么简单!从现在开始,发挥您的想象力来使这个场景变得复杂。
祝您好运!