2011-03-17 10 views
0

几十个问题&我发现一个条目(除了一个在stackoverflow上!)已经接近这个问题,但没有教会我需要什么。我有什么应该是一个几乎简单的安装:一个Windows服务和相关的托盘图标应用程序。他们使用标准的VS安装项目进行安装。在安装这些文件之后,我需要向用户展示一个对话框,以在服务的exe.config文件中设置一些参数。在该对话框中,用户应该能够中止安装。我已经尝试了两种自定义操作过程的方法,并在安装回滚时与每个方法碰到了一面墙。方法1:自定义操作的exe文件,在提交时运行。 这种作品。应用程序返回一个非零的退出代码,并发生安装回滚。我不喜欢的是:如何在自定义操作中使用VS安装程序类

  1. 当应用程序退出(后用户选择取消),安装显示错误消息说,有一个与安装问题,用户应与供应商联系。由于情况并非如此,我宁愿选择更正确的消息(“用户取消安装”)或根本没有消息。
  2. 这两个项目输出(服务和托盘应用程序)都必须列在全部四个自定义操作部分或我的对话框不会出现。相反,会出现有关缺少InstallState文件的错误,并且安装始终失败。直觉上,这似乎是错误的。

方法2:安装程序作为自定义操作,在安装或提交时运行。 这对我来说更清洁(只有自定义操作中列出的一个项目),但获取回滚过程比方法1更糟糕。似乎我必须在重写的方法(安装/提交)中抛出异常,然后在回滚发生之前给我几个错误对话框,然后回滚并不总是卸载服务。

如何在不使用WiX或类似选项的情况下完成这项工作最简洁的方法是什么?

回答

0

一个友好的用户出口对话框简单的答案是不使用VS安装类。他们有一些基本的设计缺陷。我建议你看看Windows Installer XML(WiX)部署工具基础(DTF)。 DTF是一个非常优秀的托管模型/互操作库,用于托管代码并输出与C/C++自定义操作兼容(从MSI角度来看)的DLL。它们可以作为任何MSI创作工具的自定义操作使用,而不仅仅是WiX安装程序。

Deployment Tools Foundation joins the WiX toolset.

Deployment Tools Foundation (DTF) Managed Custom Actions

+0

谢谢,克里斯(和@Cosmin)。所以,我没有一些额外的工具,在一条小溪上?过去几天我在WiX教程中度过了一段时间,但是我确实安装了它并与Votive一起玩过。与VS的整合正在招人,如果这是一条走向的路线,我现在所缺少的是一个几乎简单的例子,它使我在整个过程中端到端。我不知道如何使用DTF添加的整洁东西,也没有人告诉我如何为一个VS应用程序构建一个WiX文件,例如3个项目程序集。我是否必须购买这本书,或者是否有一个以VS为中心的教程? – 2011-03-22 21:32:53

+0

DTF将您的C#转换为C++等价DLL自定义操作。 Visual Studio也可以编写C++ DLL自定义操作,所以它应该很容易集成。否则,在我的博客上有VDPROJ,DTF,WiX的例子都可以查看。 – 2011-03-22 21:41:06

+1

我搜索了你的档案(回到2008年5月),发现了关于DTF和你使用它的讨论(这实际上是我所有的兴趣开始),但没有完整的例子。我错过了吗?我感到我所缺少的东西被许多人认为太过琐碎以至于不能覆盖他们的作品,但我坚持这一点。 – 2011-03-28 17:32:02

0

我推荐这种方法:

  • 创造出询问你的选择用户
  • 使用该对话框中设置安装属性来修改你的服务配置文件的自定义安装对话框(可以使用自定义动作或另一个安装创作工具的XML支持)

这种方式在安装之前收集信息,用户也可以放弃安装而不会出现问题。

Visual Studio不支持此方法,但它可以使用免费或商业安装创作工具完成。

如果你想坚持使用自定义操作,你可以试试这个:

  • 确保您的自定义操作被推迟,并在不运行的commit(提交意味着安装已完成,而且也没有回滚)
  • 使用Win32 DLL来显示您的自定义对话框;这种方式可以使return ERROR_INSTALL_USEREXIT (1602)显示,而不是致命的错误对话框
相关问题