首页 > 解决方案 > 使用 WPF 作为启动项目并依赖于 Windows 服务创建解决方案的单个安装程序

问题描述

问类似的问题,因为没有人回答上一个问题

我有一个包含类库项目、WPF 项目(启动项目)和 Windows 服务项目的解决方案。我想创建一个安装程序,以便在用户安装应用程序时同时安装 WPF (UI) 和 Windows 服务。

我在网上找到的大多数资源只谈论一个或另一个,而不是两者。例如这个:

我检查了有关 stackoverflow 的一些问题,但要么没有得到任何答案,要么没有像this questionthis one这样的模糊答案。

任何建议如何实现这一目标?

标签: c#wpfwindows-services

解决方案


我不是各种安装程序解决方案的专家,但是是的,这是可以做到的。我知道,因为我的项目做到了。

我们过去一直使用InstallShield ,但出于与本次讨论无关的原因,我们正在积极转向InstallAware 。坦率地说,我怀疑任何安装程序解决方案(例如,InstallShield、InstallAware、Wix 等)都可以用来执行此操作,前提是它能够在安装过程中执行批处理脚本(稍后会详细介绍) . 事实上,当我们使用 InstallAware 构建新的安装程序时,我们正在使用WinZip自解压可执行文件临时交付基于 WPF 的应用程序和 Windows 服务。WinZip 自解压器将 WPF 应用程序放在C:\Program Files\<application>\<version>文件夹中,将 Windows 服务放在C:\Program Files\<application>\Common文件夹,然后安装并启动 Windows 服务。

当然,所有这一切的诀窍是安装 Windows 服务。最初,我们使用InstallUtil.exe实用程序来执行此操作,但我们不得不谨慎行事并使用我们的安装程序提供它,因为我们无法验证我们是否可以依赖目标系统上可用的实用程序. 在此过程中的某个时候,我阅读了@Marc Gravell的这个答案。这为我在这里的回答提供了跳板,它提供了详细的说明,让您从命令行安装自己的 Windows 服务,而无需InstallUtil.exe

所以作为一组指令......

  1. 根据此处的详细信息更新您的 Windows 服务。
  2. 使用以下命令创建一个 .bat 文件:

    cd <PathToWindowsServiceInstallationFolder>
    <YourWindowsService>.exe -install

  3. 为您的 WPF 服务和 Windows 服务构建安装程序。请注意,这应该侧重于将文件部署到正确的位置。您需要将 .bat 文件包含在安装程序中。如果您的安装程序解决方案允许您将文件复制到在安装过程结束时被删除的临时文件夹,请将 .bat 文件复制到该位置,因为在安装程序完成后您将不再需要它。

  4. 最后,在安装过程中执行安装程序中的 .bat 文件。这将安装 Windows 服务。

考虑到所有事情,这真的没有那么复杂。

要注意的一件事是您的用户应该计划以管理员身份运行安装程序。由于安装 Windows 服务会更新注册表,因此没有管理权限的用户在尝试安装您的产品时可能会遇到问题。

高温高压


推荐阅读