【问题标题】:Visual Studio Installer UI integrationVisual Studio 安装程序 UI 集成
【发布时间】:2015-05-06 02:40:55
【问题描述】:

是否可以为 Visual Studio 2013 安装程序项目 (https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d) 提供自定义 UI? setup.exe 和 .msi 有什么不同? 有没有解释 VS Installer 的好例子?

任务是创建类似 VS2013 的安装程序,它从 Web 下载最新文件(URL 是硬编码的)。据我了解,setup.exe 应该从网上获取最新的 .msi 文件,下载并运行它?因此,setup.exe 需要以某种方式进行自定义。这可能吗?

【问题讨论】:

  • 抱歉一堆问题,我是 C#/VS 的新手,缺乏它的基础。
  • Visual Studio 2013 不再有安装程序项目。你问的是哪种安装程序。
  • @JohnSaunders 更新了我的问题。
  • Visual Studio 安装程序项目模板不再随 Visual Studio 提供。您可以使用 XCopy/MS Deploy 进行 Web 部署。要创建安装程序包,您可以使用 InstallShield

标签: c# visual-studio-2013 windows-installer


【解决方案1】:

如果这个扩展真的和 VS2010 安装程序项目具有相同的功能,那么,这种 UI 扩展是不存在的。

进行简单自定义的功能非常有限,但确实非常有限。

如果您需要一个漂亮的用户界面,那么您应该有一个在安装后运行的程序,以便与安装人员进行交互。

【讨论】:

  • 我想知道微软是如何做他们的 VS 安装程序的。我看到XeamVisualInstaller它使用WiX,但免费版功能有限。
  • WiX 是开源软件。功能齐全。 Microsoft 创建了他们自己的自定义引导程序应用程序来驱动 VS 设置的 UI。这与 WiX 无关。
【解决方案2】:

在 VS 安装世界中,setup.exe 是一个引导程序,它安装先决条件,然后运行您的 MSI。如果您没有先决条件,则不需要 setup.exe。

还有其他工具可以让您自定义 UI - 只是 VS 不支持。 WiX 和(完整的)InstallShield 等工具可让您在 MSI 对话框的功能范围内构建自己的 UI。在只安装一个 MSI 文件的情况下,这通常是人们所做的一切。

请注意,MSI 对话框与 .NET 对话框或控件无关 - 这就是它们非常基础的原因。那里没有 C#,只有 MSI 内部支持的控件和对话框。您根本无法使用自己的 C# 对话框。

如果您要安装多个 MSI 文件,就好像它是一个产品一样(我相信 SQL Server、Office、Visual Studio),那么您需要一个包装器(WiX 有 Burn 引导程序,InstallShield 有一个链接器) 使它看起来像一个单一的设置。如果是这种情况,或者您希望拥有完全自定义的 C# 对话框 UI,那么您可以自己编写 - 或者像这些人一样在 WiX 框架上构建:

http://www.wrightfully.com/part-1-of-writing-your-own-net-based-installer-with-wix-overview/

http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application/

架构基于此:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb309215(v=vs.85).aspx

和 MsiSetExternalUIRecord。基本上,您编写代码来安装一个或多个 MSI,而 Windows Installer 在安装期间为每个事件回调您的代码。这是您拥有自己的启动对话框的地方,Windows Installer 将回调并显示进度消息,以及错误、使用中的文件等。使用像 WiX 这样的工具更容易,它提供了大部分框架那。

所以这取决于自定义对话框的含义。如果您的意思是“不像 Visual Studio”或“我需要一个对话框来输入 VS 不提供的内容”并且您要安装一个 MSI,那么 WiX、InstallShield、Advanced Installer 和其他工具都可以做到这一点。如果您的意思是“我想要我自己的完全自定义的 C# 对话框”,那么您需要使用带有 MsiSetExternalUIRecord 的 C# 互操作或使用 WiX boostrapper 来编写您自己的对话框,我相信这是唯一的一个 - 如果那是错误的,请纠正我。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2016-12-28
    • 2011-01-15
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多