我建议看一下 Wix#。 http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX。
对于需要创建 Windows Installer MSI 来部署他们的应用程序的 C# 开发人员,Wix# 可能是 Microsoft 从 VS2012 开始从 Visual Studio 中删除的“打包和部署”项目类型的最佳替代品。Wix 是 WiX 工具集的 C# 前端,允许使用 C# 语言构建完整的 Windows Installer MSI。
您特别提到您的所有安装程序都是简单的项目,它们将文件安装到给定位置,在安装期间使用自定义操作,以使 .config 文件位置特定(用实际值替换标签)。
假设您的项目确实如您所指出的那样高度相似,Wix# 将非常适合这种类型的要求。您将在 C# 中为一个典型程序开发一个好的 Wix# 示例,然后为您要替换的每个附加 .vdproj 安装程序克隆 100 次(或多次)。更好的是,如果您有一个擅长 T4 模板的团队成员,您可以使用它来自动化将您的第一个 C# Wix# 原型安装程序转换为模板的过程,然后使用该模板自动生成剩下的 99 个 .cs Wix# 代码文件用于其余项目。
下面是您请求的 Wix# 安装程序类型的 C# 代码示例。这假设您已经编写了一个名为“TailorMyConfig.exe”的实用程序,例如,一个使用 ConfigurationManager.AppSettings 例程的简单 C# 程序,并且您正在将这个 exe 与您的应用程序一起部署。
using System;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Deployment.WindowsInstaller;
using WixSharp;
class Script
{
static public void Main(string[] args)
{
var project = new Project("MyProduct",
new Dir(@"%ProgramFiles%\My Company\My Product",
new File(@"Files\Bin\MyApp.exe"),
new File(@"Files\Bin\TailorMyConfig.exe")),
new ManagedAction("UpdateConfigFile"));
project.Id = new Guid("6f330b47-2577-43ad-9095-1861ba25889b");
Compiler.BuildMsi(project);
}
}
public class MyCustomAction
{
[CustomAction]
public static ActionResult UpdateConfigFile(Session session)
{
if (DialogResult.Yes == MessageBox.Show("Config file update ready to run.\n Update config file(s) now?",
"Config Tailoring Utility",
MessageBoxButtons.YesNo))
{
Process.Start("TailorMyConfig.exe", "Run utility to tailor config file to current system");
}
return ActionResult.Success;
}
}
请注意,有一些“更好”的方法可以使用 WiX 功能修改配置文件。为简单起见,上面的示例假定使用自定义编写的 C# exe 实用程序来修改配置文件。我建议改用 WiX XML 功能来执行此操作。您可以使用“XML 注入”的 Wix# 技术将几乎所有 WiX XML 功能直接合并到您的 Wix# 设置中。
请记住,Wix# 只是一个发出 WiX XML 语法的 C# 前端。在 Wix# 发出 WiX XML(wxs 文件)之后,可以轻松地对该 wxs 文件进行后处理以插入其他 WiX XML 功能。然后生成的 wxs 文件由 WiX 工具集编译成 MSI。
有关使用 XML 注入将 WiX XML 功能合并到 Wix# (C#) 安装中的示例,请查看此处在 Wix# 中,当仅部署注册表项时,如何避免在目标系统上创建物理文件夹?
在那个问题中,请参阅我的答案,该答案使用将委托连接到“WixSourceGenerated”事件的技术。
然后,您可以使用这种 XML 注入方法将一些 WiX XML 插入到您的安装程序中,从而完成配置文件的编辑。修改配置文件的一些典型 WiX XML 示例如下:
如何在安装期间修改 .NET 配置文件?
我意识到这是一个较老的问题,但它出现在我的搜索中,所以我想让其他搜索者知道这个额外的 Wix# 选项。Wix# 方法在我的环境中非常有用,它允许使用熟悉的 C# 技能集,而无需一头扎进 WiX XML 安装程序技术的全部复杂性。