1

我有一个小应用程序,它是一个可执行文件。就上下文而言,这将部署到瘦客户端计算机并在启动时自动运行。用户无权关闭此应用程序。

但是,我需要应用程序易于更新。我无法编写我的软件来执行任何类型的自动更新程序,因为这些站通常有一个必须事先禁用的写阻止程序*。

作为管理员最简单的解决方案是使用瘦客户端提供的各种工具或需要的组策略/脚本将新的 EXE 复制到旧的 EXE 上。更新不必立即生效 - 下次重新启动就可以了。

问题在于,当然,可执行文件正在使用中并且不能被覆盖。允许这种情况发生的最好方法是什么?将软件完全加载到内存中并从那里运行?执行某种例程,将 exe 复制到临时文件夹,然后使用命令行开关执行它,这样它就不会无休止地循环?

*这可能会引起一些混乱。这些是 Windows XP / Windows 7 Embedded 机器。在大多数情况下,它们像普通计算机一样工作,除了文件系统写入被透明地重定向到缓存驱动器。重新启动时,所有更改都将完全还原。更新机器的普通脚本将类似于:

Disable Write Blocker 
Reboot Machine
Copy Files
Reboot Machine
Enable Write Blocker
Reboot Machine

但是,我的应用程序将在每次重新启动后自动启动,因为没有通知它的机制。因此,当脚本运行时,可执行文件仍在使用中。

4

2 回答 2

0

您也许可以将 Windows 的MoveFileEx与 DelayUntilReboot 选项一起使用。

要从 C# 执行此操作,请参阅此答案,该答案显示如何设置对 Windows API 的调用。

注意:我认为通话需要管理员权限。

于 2013-05-24T10:28:12.233 回答
0

您可以使用称为影子复制程序集的东西。在网上搜索,你会发现很多例子(也在 SO 和 Codeproject 上)。

显然,如果您的写保护被禁用,应用程序只能更新。您使用的是 FBWF 还是 EWF?您甚至可以将应用程序文件夹排除在写保护之外。

于 2013-05-24T11:06:10.243 回答