5

我们有大约 100 多个 Visual Studio C# / .net 解决方案,其中包含一个用于部署的 Visual Studio 安装程序项目 (vdproj)。这些是在 Visual Studio 2010 中构建的。

为了升级到 Visual Studio 2012,我们需要将这些 .vdproj 项目迁移到 Wix,因为 vs2012 不再支持这些项目类型。

这些项目大多是简单的项目,它们将文件安装到给定的位置。我们在设置过程中使用自定义操作,使 .config 文件位置特定(用实际值替换标签)。

将这些项目转换为 Wix 的最佳方法是什么(每个项目的工作量最少)?

4

4 回答 4

1

我会在这里发表我的反应。因为更好的格式和我喜欢解释的一些事情。

在您对您的评论的回复中。答案还包含有人使用 powershell 制作的脚本。您可以做的是创建另一个 powershell,它将遍历您的项目,然后执行脚本。但是你将只有 wxs 文件,你仍然需要创建 100 多个 wix 项目并将文件添加到该项目中。

您还可以使用 heat.exe 在要安装的项目中创建构建后事件。例如(可能需要对您的项目进行一些调整/更改)

call "C:\Program Files (x86)\WiX Toolset v3.6\bin\heat.exe" project "$(ProjectDir)$(ProjectFileName)" -directoryid INSTALLDIR -pog Content -gg -scom -sreg -sfrag -out "$(SolutionDir)Installed\$(ProjectName).Content.wxs"

然后您可以将输出文件链接到 WiX 项目,这样当您添加文件或 dll 时,它将再次自动生成,并且您的文件将保持同步。您现在需要做的就是创建某种可以在所有 wix 项目中使用的 product.wxs 模板。

我认为这里的解决方案是结合使用 PowerShell 和 heat.exe。您可以使用上述命令为您的项目生成 wxs 文件。但是您仍然需要手动添加 wix-projects。

于 2012-10-30T20:25:43.050 回答
1

您应该首先获取 WiX 书(约 500 页),并仔细阅读。其次,你应该自己试验一下。第三,您应该手动将它们转换为 WiX。

不要使用转换器,它们毫无用处,因为它们会产生垃圾,特别是如果你已经有了相当简单的安装程序。

于 2014-12-18T22:00:16.650 回答
0

您是否与 Wix 紧密相关?

也许您可以切换到免费(开源)系统的 NSIS 或 Inno Setup。

有用于使用 NSIS/Inno Setup 的 Visual Studio 扩展,它可以处理 VS Setup 项目 (.vdproj) 并将它们转换 - http://visualstudiogallery.msdn.microsoft.com/5e57fe9a-ae5d-4740-a1c3-7a8e278e105b

于 2013-06-11T06:19:20.750 回答
0

我建议看一下 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 安装程序技术的全部复杂性。

于 2014-12-18T21:50:32.493 回答