0

我需要定期将一组更新的文件(DLL、javascript)作为补丁发布到多个不同版本的 Windows PC(vista/XP/7 等)。目前,我的网站上有一个链接,供每个用户下载 setup.exe 文件并手动安装补丁(替换现有的 DLL)。为了消除手动过程,我正在研究如何在 Windows 上自动运行一个程序(我假设这意味着一个服务),它将定期检查我的服务器是否有更新,下载它并自动触发 setup.exe(或一些替换补丁文件的类似过程)。

我本身不是 Windows 开发人员,但已经下载并尝试检查各种选项(为了不重新发明轮子),例如 Sparkle、DDay、CSAutoUpdater、Npackd,并且刚刚开始研究 Google Omaha - 但大多数人认为检查当 Windows 应用程序使用它们的库/组件启动时发生。我需要独立于我要更新的应用程序运行自动更新程序 - 所以我需要首先让所有用户运行 setup.exe,它应该安装并启动我的 Windows 服务,以便它可以每天与 Windows 一起运行以运行检查、下载和安装更新的程序。

我在stackoverflow和codeproject上找到了一些用于编写windows服务的示例代码,但找不到如何自动安装它(理想情况下,对于较新的windows版本没有UAC麻烦)。所有这些都需要使用 instalutil 或其他一些手动过程来安装和启动服务。

任何关于这方面的指导都会很棒!谢谢 - 并对冗长的问题表示歉意。当我尝试其他产品时,将更新其他结果。

4

3 回答 3

1

正如您提到的 Npackd,我想描述如何使用它来完成。

我同意 selbie 的观点,最简单的解决方案是使用 Windows 调度程序创建一个任务。

对于 Npackd,您需要自己的存储库 - 一个可通过 HTTP 访问的 XML 文件,例如http://www.yourserver.com/rep.xml。这是一个存储库的简单示例:https ://gist.github.com/raw/4132983/dabecde48c796d4fdfa2f645bb744ac58640572c/TestRepository.xml 。用户将下载 Npackd (http://code.google.com/p/windows-package-manager/downloads/list) 并将 URL 添加到存储库列表中。

我会定义 2 个包:一个用于程序本身,一个用于自动更新程序。这样,如果有人想手动更新程序,他也可以这样做。

您可以使用每个 Windows 系统上可用的命令行工具 schtasks.exe 创建或删除 Windows 任务。

更新命令本身也很简单:

npackdcl update --package=<package>
于 2013-01-15T18:39:51.297 回答
0

为了消除手动过程,我正在研究如何在 Windows 上自动运行一个程序(我假设这意味着一个服务),它将定期检查我的服务器是否有更新,下载它并自动触发 setup.exe(或一些替换补丁文件的类似过程)。

您可能希望将 Windows 任务计划程序服务用于语句的“定期”部分。您可以使用它来启动实际执行“检查更新”、下载、复制等所需的任何代码……我认为您不需要 Windows 服务。

您可能会编写一个任务计划程序事件。或者使用API以编程方式进行。

于 2013-01-15T07:26:10.303 回答
0

您可以执行以下操作:

  1. 维护数据库中 dll、exe 等的版本。
  2. 在应用程序启动之前,检查已安装版本的版本与 DB 中的版本。
  3. 如果版本不同,请要求用户从服务器更新到最新版本。

  4. 如果他点击是。从服务器更新文件。

普拉萨德。

于 2013-06-27T14:57:37.723 回答