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

5
我们有100多个Visual Studio C# / .net解决方案,其中包含一个Visual Studio Installer项目(vdproj)用于部署。这些是在Visual Studio 2010中构建的。
为了升级到Visual Studio 2012,我们需要将这些.vdproj项目迁移到Wix,因为vs2012不再支持这些项目类型。
这些项目大多是简单的项目,可以将文件安装到给定位置。我们在安装过程中使用自定义操作,使.config文件具有特定于位置的属性(用实际值替换标记)。
如何以最少的工作量将这些项目转换为Wix是最好的方法?

1
这个问题怎么样? - Rik van den Berg
1
@Rikkos:这个问题的麻烦在于被接受的答案使用了工具dark。这个工具可以“反向工程”一个.msi文件,但是结果需要进行大量清理。对于100多个项目来说,这不是一个理想的选择。我需要直接从.vdproj转换到.wxs。 - oɔɯǝɹ
据我所知,有一个名为WixEdit的程序(http://wixedit.sourceforge.net)。您可以将msi文件加载到其中,该程序将把它转换为Wix。 - Nerielle
2
请检查一下“VDProj to WiX Converter”是否对您有所帮助。http://visualstudiogallery.msdn.microsoft.com/0f8ff662-c844-4c3c-9c7b-b170cea16baf - AKaral
@AKaral听起来很有前途,谢谢提供链接,我会去看看的。有点遗憾的是,演示视频只有在变得有趣时才(字面上)告诉我们“魔法发生在这里”... - oɔɯǝɹ
@AKaral; 我试用了这个工具(链接在网站上不容易找到,必须通过邮件支持来获取)。试用期为7天。它似乎能够很好地转换出.vdproj项目(包括自定义操作)。它创建的.WiX项目是功能齐全且可靠的,但我认为它们并不真正可维护。也许是我对WiX不熟悉,但我发现XML难以阅读。试用期已过,但我不能说我想在所有项目中使用这个工具。 - oɔɯǝɹ
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时,它都会自动生成,并且您的文件将保持同步。现在,您只需要创建某种product.wxs模板,即可在所有wix项目中使用。

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


0

我建议看一下Wix#。http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX

对于需要创建Windows Installer MSI以部署其应用程序的C#开发人员来说,Wix#可能是替代Microsoft在VS2012中删除的“打包和部署”项目类型的最佳选择。Wix是WiX工具集的C#前端,允许使用C#语言构建完整的Windows Installer MSI。

您特别提到所有安装程序都是简单项目,它们将文件安装到给定位置,并在设置期间使用自定义操作使.config文件位置特定(将标记替换为实际值)。

如果您的项目确实非常相似,那么Wix#将是满足此类要求的好选择。您可以为一个典型程序开发一个良好的C# Wix#示例,然后将其克隆100次(或任意数量),以替换每个额外的.vdproj安装程序。更好的是,如果您有一个擅长T4模板的团队成员,您可能能够使用它来自动化将第一个C# Wix#原型安装程序转换为模板的过程,然后使用该模板自动生成其余99个.cs Wix#代码文件,以用于您其余的项目。

以下是您请求的Wix#安装程序类型的C#代码示例。这假定您编写了一个名为“TailorMyConfig.exe”的实用程序,例如,一个简单的C#程序,它使用ConfigurationManager.AppSettings例程,并且您正在部署此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功能。然后,WiX Toolset将编译生成的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配置文件?

我知道这是一个比较旧的问题,但它出现在我的搜索结果中,所以我想让其他搜索者了解这个额外的Wix#选项。在我的环境中,Wix#方法非常有用,它允许使用熟悉的C#技能集,而无需跳入WiX XML安装程序技术的全部复杂性。


0
你应该首先获取WiX书籍(约500页),并非常仔细地阅读它。其次,你应该自己进行一些实验。第三,你应该手动将它们转换为WiX。
不要使用转换器,它们是无用的,因为它们会产生垃圾,特别是如果你已经有相当简单的安装程序了。

0

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