如何将100多个Visual Studio安装程序项目(vdproj)转换为Wix安装程序?

时间:2012-10-28 13:42:52

标签: visual-studio-2010 wix visual-studio-2012 migrate vdproj

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

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

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

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

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

你是否严格依赖Wix?

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

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

答案 2 :(得分: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#setup中。

请记住,Wix#只是一个发布WiX XML语法的C#前端。在Wix#发出WiX XML(wxs文件)之后,可以轻松地对该wxs文件进行后处理以插入其他WiX XML功能。然后,生成的wxs文件由WiX工具集编译为MSI。

有关使用XML Injection将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修改配置文件的示例如下: How to modify .NET config files during installation?

我意识到这是一个有点老问题,但它出现在我的搜索中,所以我想让其他搜索者知道这个额外的Wix#选项。 Wix#方法在我的环境中非常有用,它允许使用熟悉的C#技能组,而不必首先涉及到WiX XML安装程序技术的全部复杂性。

答案 3 :(得分:0)

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

不要使用转换器,它们是无用的,因为它们会产生垃圾,特别是如果你已经非常容易安装。