2

我已经构建了一个安装 Windows 服务(以 NetworkService 用户身份运行)的 C#、.NET3.5 Web 应用程序。该服务充当网络上任何机器的专用 Web 服务器,用户使用浏览器连接到该服务。

整个过程是使用使用 Visual Studio 2008 构建的 msi 文件安装的。msi 文件安装并运行部署应用程序,该应用程序用于设置用户和权限,以及将 exe 安装为服务。

如果我决定增强应用程序(或查找并修复错误),我可以生成一个新的 msi 文件,并让用户在运行我的应用程序的所有机器上运行它。但我宁愿这自动发生(包括从我的网站下载更新,并部署它们)。

因为它作为服务运行,它不是特定于用户的,所以我理解 Click Once 部署不是一个选项。

我有什么办法可以做到这一点?

4

3 回答 3

4

如果您真的不希望在此过程中进行任何用户交互,您是否可以拥有第二个服务,即更新看门狗,并识别主服务的新版本何时可用,然后处理下载/停止/安装/启动主要服务?

于 2012-12-11T18:45:49.150 回答
1

这是我最终得到的解决方案:

安装服务时,我授予服务用户启动和停止服务的权限。有关更多详细信息,请参阅我关于服务权限的问题。

服务程序检查版本文件的远程 url,并根据当前程序版本检查它。如果版本文件不同,它会下载更新 zip,从中提取更新程序,锁定文件,运行更新程序并立即退出。

更新程序锁定同一个文件,等待几秒钟(只是为了确保服务已停止),解压缩 zip(不包括更新程序本身),最后重新启动服务。

于 2013-04-03T19:28:11.160 回答
0

这是我现在正在尝试的解决方案:

有一个存根服务,它只检查更新程序,运行更新程序,然后运行主服务程序。如果主服务程序以特定的退出代码退出,它会循环并重复(否则它会正常退出)。

主服务程序检查版本文件的远程 url,并根据当前程序版本检查它。如果版本文件不同,它会下载一个更新 zip,从中提取更新程序,并以特殊的退出代码退出。

原始安装程序为运行服务的用户帐户授予程序文件夹的完全权限(因此更新程序可以更新服务程序)。

唯一的缺点是无法更新存根服务。

于 2013-04-02T18:26:35.773 回答