用InstallShield/WIX替换VDPROJ安装程序文件

6
我们的产品目前通过4-5个MSI进行安装,这些MSI是由.vdproj文件创建的,这些文件包括来自VS 2010项目输出的信息和额外的合并模块。
由于VS2012不再支持VS Setup Projects(哦,不!),因此我们必须寻找其他替代方案,我一直在研究InstallShield和WIX。
我已经尝试了InstallShield, 但是除了安装产品之外,安装程序还必须接收一些参数,例如数据库名称和位置等。我似乎找不到将此信息传递到InstallShield项目中的方法 - 尽管我使用的是Visual Studio的InstallSHield限制版
我不确定哪个最好用?有没有人将VDPROJ转换为WIX或IS有相关经验?
编辑:看起来WIX将是最简单的选择,我正在努力熟悉它。我似乎找不到任何有用的帖子来将项目输出直接导入我的WIX安装程序,并且如何创建变量。(不使用插件)

我现在也正在经历同样愚蠢浪费时间的过程。WiX的学习曲线非常陡峭。Installshield很容易使用,但Installshield LE除了32位无附加文件部署之外,几乎毫无用处。你还不如使用OneClick。 - Dirk Bester
1
有使用Wix建立安装项目的完整示例吗? - Kiquenet
4个回答

3
很难给出简单的答案,因为您实际上正在询问需要了解安装需求和创建安装程序的艺术的大量培训的高级问题。
就我个人而言,我的安装程序100%使用WiX、100%使用InstallShield(包括Limited Edition和Premiere Edition)以及两者的混合体。
Limited Edition有一些限制,但它也做一些非常好的事情,并提供一些在WiX中不存在或不易于实现的功能。
一个好的策略是使用InstallShield LE作为一个简单的容器,然后在WiX中进行大部分的作者编写。我在我的博客中描述了这种模式: 通过Windows Installer XML增强InstallShield - 证书 InstallShield Professional及以上版本具有迁移VDPROJ项目的工具,但我建议谨慎使用。大多数VDPROJ安装程序都有一些可怕的作者编写,最好重构而不是迁移。

2
我强烈建议看看Wix#。请参见http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX
另请参见CodePlex主页:http://wixsharp.codeplex.com/ 对于主要使用C#编码的开发人员,Wix#可能是最简单和舒适的技能集,它是免费的,并直接集成到Visual Studio环境中。我一直在VS2012和2013中成功使用它。
对于需要创建Windows Installer MSI以部署其应用程序的C#开发人员,Wix#或许是替换Microsoft从VS2012开始删除的“打包和部署”项目类型的最佳选择。Wix是WiX(Windows Installer Xml)工具集的C#前端。使用Wix#可以使用C#语言构建完整的Windows Installer MSI。
Wix#适用于广泛的安装/部署场景,并且在持续集成方案中表现得相当好。有关使用Wix#部署Windows桌面应用程序、安装Windows服务、安装ASP.NET网站以及许多其他类型的安装的示例。

Wix#处理典型的安装程序要求,对于简单项目的Wix#安装程序代码确实很简单。对于更复杂且需要高级功能的应用程序安装,Wix#可以在需要时利用完整的WiX工具集的强大功能。例如,在安装.NET应用程序时,典型的要求是在目标系统上安装应用程序exe和dll文件,并定制一些.NET配置文件和/或注册表项。

以下是一个简单的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 XML功能修改配置文件有“更好”的方法。为简单起见,上面的示例假定使用自定义编写的C# exe实用程序来修改配置文件。我建议改用WiX XML功能来完成这项工作。您可以使用Wix#技术中的“XML注入”直接将几乎任何WiX XML功能合并到Wix#设置中。
请记住,Wix#只是发出WiX XML语法的C#前端。在Wix#发出WiX XML(wxs文件)之后,该wxs文件可以轻松地进行后处理以插入其他WiX XML功能。然后,WiX工具集将编译生成的wxs文件为MSI。
要了解如何使用XML注入将WiX XML功能合并到Wix#(C#)安装中,请参阅此处的示例In Wix#, how to avoid creating a physical folder on the target system, when deploying only registry entries?。在那个问题中,请查看我的答案,它使用将委托钩接到“WixSourceGenerated”事件的技术。
您可以使用XML注入方法将一些WiX XML插入到安装程序中,以完成配置文件编辑。以下是一些典型的WiX XML示例,用于修改配置文件: 如何在安装过程中修改.NET配置文件? 另一个安装程序的典型要求是在目标系统上添加或修改Windows注册表项。Wix#提供了直接支持,使用“RegValue”类即可实现。使用Wix#的优点是,您还可以获得完整的“卸载”功能,包括将注册表项卸载/还原到预安装状态。这是Wix#构建在WiX Toolset和Windows Installer技术之上的自然结果。以下是一个仅包含注册表的Wix#安装程序示例:在Wix#中,如何在部署仅包含注册表项时避免在目标系统上创建物理文件夹? “Wix#”方法在我的环境中非常有用,它允许使用熟悉的C#技能集,而不必立即跳入WiX XML安装程序技术的全部复杂性中。第一个被接受的答案提倡这种方法:“一个好的策略是使用InstallShield LE作为简单容器,然后在WiX中完成大部分编写工作。我在我的博客中描述了这种模式:http://blog.iswix.com/2011/01/augmenting-installshield-using-windows_19.html。”虽然这是一种很好的可行方法,但我在这里建议的方法具有以下优点:“使用Wix#加WiX的方法的优点”。
  • 完全不需要处理 InstallShield LE 或其他专有的安装程序产品
  • 大多数安装程序都是用 C# 代码编写的,这是一个熟悉的技能集
  • 无需事先学习完整的 WiX 工具集环境;您可以从 C# 代码开始,然后在需要时添加高级的 WiX 功能,使用 XML 注入。
  • 该方法在持续集成环境中运作良好,所有组件都适合在构建服务器上进行 XCopy 部署安装,所有组件都非常适合通过脚本自动化,例如 Powershell 脚本。
  • 如果微软再次改变与 Visual Studio 捆绑的安装程序工具的方向,您将不会受到影响。

与 IS LE + WIX 相同的元素

  • 基于WiX工具集的能力构建,因此所有WiX XML的功能都可以并入安装程序
  • 许多关于WiX解决部署问题的优秀"How-to"在SO和其他地方都可以找到
  • 生成真实的MSI Windows安装程序,包括卸载功能和该技术的所有出色功能。
  • 当创建安装程序时,您将希望了解更多关于WiX和Windows Installer技术。高级功能通常需要进入WiX XML。
  • 两者都或多或少无缝地集成到Visual Studio环境中。(如果有什么区别,Wix#方法可能会稍微有些优势)

因此,虽然另一种方法是可行的解决方案,但我建议在VS2012、VS2013、VS201x上采用Wix#+WiX工具集作为最少烦恼的路径。也许最大的优势是,无论Microsoft的营销经理做出何种后台交易来包括或撤销Visual Studio的部署技术,您都不太可能再次改变您的基础部署技术和方法,并遭受Microsoft的打击。


1

对于免费工具而言,WiX 是您的最佳选择。如果您还对商业工具感兴趣,Advanced Installer 可以帮助您更快地创建/转换项目,无需任何脚本。它还有一个预定义的项目模板,可用于导入您的 VDPROJ。对于需要访问其 Dialogs EditorSQL Scripts 功能的企业许可证是必需的。但您可以在试用期内测试所有这些功能。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接