1

我有以下内容:

  1. 我编写的 Windows 服务,它仅由以下两个应用程序使用:
  2. 客户端应用程序。
  3. 代理应用程序。

没有服务,客户端和代理都无法运行。我们当前的安装正在使用ClickOnce(该服务尚未部署)。

我想要的是:

  1. 2 个单独的安装 - 客户端+服务、代理+服务。这是因为我有很多机器只执行客户端发送的任务,它们不需要客户端。此外,并不是每个想要客户的人都想让他的机器成为代理。
  2. 部署逻辑包 - 例如,仅部署客户端是没有意义的,因为它不能自行运行。单独部署服务也没有意义。
  3. 保持版本兼容性 - 如何处理以下场景:有人安装了代理+服务版本 1,然后安装了客户端+服务版本 2。
  4. 提升权限:是否可以使用具有提升权限但当前权限不一定提升的帐户在计算机上安装 Windows 服务?我可以进行静默安装吗?

ClickOnce非常好,但不是强制性的。如果有更好的解决方案可以满足我的要求,我会切换到它们,前提是仍然可以进行更新(强制更新以及延迟更新的选项)。

4

1 回答 1

2

我将介绍 ClickOnce 方法。msi 安装可能更合适,但听起来好像您想要某种自动更新。强制 Windows 服务安装到 ClickOnce 方法可能比让 msi 安装自我更新更容易。

ClickOnce 的核心很简单。它使用户配置文件文件夹中的文件与服务器上的文件保持同步。这应该适用于客户端和代理应用程序。对于 Windows 服务来说并没有那么多。

对于服务,我会让 ClickOnce 部署服务位。然后编写将在客户端/代理中执行的代码以安装/更新服务。

在使用服务时,我发现Topshelf非常棒。它可以让你编写一个标准的控制台应用程序,使开发更容易。然后要安装它,您可以调用控制台 exe 并传递一个--install开关。我认为您可以在客户端/代理启动和复制文件、安装/更新/启动/停止服务以及使您的服务正常工作所需的任何其他操作时执行该代码。

现在为您的编号列表...

  1. 可以处理。两个 ClickOnce 安装都包含该服务。
  2. 只要您可以通过自己的代码安装服务,这应该可以工作。
  3. 这更棘手。你必须定义你想要发生的事情。您将完全控制安装服务的代码,因此您可以决定要做什么并适当地处理它。
  4. 我猜你需要提升权限才能安装 Windows 服务。这意味着来自 ClickOnce 的提示。解决这个问题的唯一方法是签署您的部署,然后在客户端机器上导入证书。恕我直言,避免一个提示并不值得。
于 2013-04-09T19:30:45.803 回答