苦苦挣扎着安装MSI(VS 2008)并安装服务

时间:2013-07-11 14:58:21

标签: c# windows-installer custom-action

我想为我的应用创建一个安装程序。该应用程序包含2个Windows服务(使用VS 2008用C#编写),并且有2种安装类型 - 服务器(需要两种服务)和客户端(只需要1)。 Server服务是一个小型的手写Web服务器(在特殊端口上),它是应用程序本身。 客户端服务是另一个手写的Web服务器(在不同的端口上),它充当本地连接的指纹扫描器的设备驱动程序。

在任何一种情况下,都会安装使用客户服务网址打开网页浏览器的快捷方式。

安装时我需要询问用户:

  1. 如果他们想要安装客户端或服务器(理想情况下我会使用我已编写的C#代码来确定网络上是否已经安装了服务器服务,并暗示他们可能希望客户端安装,如果是这样)
  2. 如果他们想要桌面上的快捷方式(以及程序中)。
  3. 如果他们希望在机器启动时自动启动Web浏览器。
  4. 如果他们希望网络浏览器启动全屏(也称为自助服务终端模式)。
  5. 如果安装服务器版本,是否要将数据放在程序文件夹的子文件夹中,而不是标准的Program Data文件夹中。
  6. 首先,我使用VS 2008创建了一个MSI安装项目。但是,这有几个缺点:

    • 似乎没有办法安装网页快捷方式,而不是你安装的exe文件的快捷方式。
    • 似乎没有办法安装这些服务。
    • 似乎没有办法在文件夹上设置权限(例如,NETWORK SERVICE用户需要对数据库进行写访问才能安装服务器。)
    • 似乎没有办法更新防火墙规则(允许服务侦听端口)。
    • 在尝试覆盖升级安装上的exe文件之前似乎没有办法停止现有服务(之后又重新启动它们)。
    • 安装似乎不记得您上次使用的设置,因此用户陷入混乱,并在升级时选择了错误的设置。
    • 升级安装也存在一些问题,因为如果自原始安装以来修改了一个或多个原始文件,升级安装似乎不会用新版本覆盖它们。或者,至少,这是我可以为一些观察到的行为提出的唯一解释。

    所以,最初,我编写了一个C#exe程序来完成大部分安装 - 我让我的msi安装程序只安装我的exe程序,以及一个包含其他所有内容的zip文件。然后它运行了我的exe程序,该程序询问了问题,从zip解压缩了所需的文件,并完成了所有必要的操作。

    但是,这实际上颠覆了安装msi的整个想法!

    我一直在想要将我的exe程序转换为自定义动作dll,但是当我想更新进度条并在安装程序对话框中显示进度消息时,我就陷入困境(从Googling看来这不是可以从C#自定义操作?)。

    我并不热衷于学习一种全新的安装语言(例如,我看过WiX,但它看起来非常复杂),虽然我可以说服我,如果我能找到合适的教程,并附上相关的例子。

    是否有替代的C ++ shim可以让我从安装中调用C#自定义动作dll,并传入我需要的句柄来控制msi UI和进度条?

    或者有更好的方法来制作安装程序吗?

2 个答案:

答案 0 :(得分:1)

是的,WiX有一个学习曲线。

您想要的大部分内容都可以在MSI中完成,但您需要MSI知识或WiX XML语法知识或可视化工具。

说实话,我对不同的设置要求有一个很好的概述,而你的不在低端进行分类,特别是初学者到MSI。它会非常棘手,直到你准备好它,并修复意外的陷阱/错误。 如果可能的话,我会考虑向具有MSI知识的人寻求帮助,例如初始项目设置。或者通过示例学习WiX语法。

否则:有一件事可以帮助您快速完成某些任务:您不需要C ++填充程序来调用C#。您也可以使用C#自定义操作(查找DTF / WiX),但将C#编译为.exe并将其称为自定义操作可能更容易。可以直接在Visual Studio解决方案导航器对话框中使用。

以下是您的任务,可以使用继承的MSI逻辑调用自定义操作

  • 似乎没有办法安装服务。 (当然,MSI可能没有ca,但有人可能会说哪个更好。)
  • 设置文件夹权限(与上述相同)
  • 似乎没有办法更新防火墙 (通常使用对windows命令的自定义操作调用)
  • 似乎没有办法停止现有服务(确实如此,但你也可以用ca来调用它。)

你仍然需要一些东西来构建一个功能更强大的msi用于其余的或者要求..

这是一个很好的网页评论不同的设置免费软件/共享软件工具:

http://www.techsupportalert.com/content/best-free-setup-builder.htm

如果你想留在MSI,也许你想看看“高级安装程序”(也有免费版本)或“Clickteam Install Creator”

除了市场领导者之外的商业工具,但不是廉价的InstallShield(除LE之外)还有InstallAware,IndigoRose的MSI工厂和提到的AdvancedInstaller。

我无法真正比​​较它们,但如果你想要商业化,也许你至少可以看一下上面提到的两个。

MSI Factory是WiX输出编辑器之一,听起来不错。您可以了解有关Wix的信息,并有一个图形起点。据我所知,他们中没有人真正被社区广泛接受,但我不是这里的专家。

答案 1 :(得分:0)

这是大约十二个问题。这不是负责任的。您是否正确地意识到您当前的设计颠覆了Windows Installer。

您要求 DO 的大部分内容都存在于MSI / WiX中。有些人需要自定义操作。设置开发 IS 开发,需要多年的经验才能真正擅长工艺。我估计这是一个专家的40小时项目和一个初级阶段的1年项目。

一些谷歌搜索会找到诸如InternetShortCut元素,ServiceInstall和ServiceControl元素,权限元素,记住属性模式,防火墙扩展等主题。