如何通过网络共享运行应用程序以便更新应用程序?

如何通过网络共享运行应用程序以便更新应用程序?

我们有一个内部桌面应用程序,已将其部署到网络共享。该目录中有每个版本的子目录,即 z:\Apps\ApplicationX\1.0 z:\Apps\ApplicationX\2.0 z:\Apps\ApplicationX\2.1

我想在用户桌面上放置一个指向应用程序最新版本的快捷方式。我目前的解决方案是将当前版本放入名为“z:\Apps\ApplicationX\Current”的目录中,并在桌面上放置指向该 exe 的快捷方式。

问题是,当他们运行该应用程序时,我无法更新该应用程序,因为文件已被锁定。

我尝试更改快捷方式以指向一个批处理文件,该文件在本地复制文件然后从那里运行它,但我们都在使用 Windows 7,并且 UAC 导致将文件复制到我期望安装它的 C:驱动器时出现问题。

我想我可以将可执行文件复制到用户主驱动器并从那里运行它,但我不喜欢将可执行文件放在用户主驱动器中。这也意味着网络上有该应用程序的多个副本,我不喜欢这样。

我还以为我可能能够有一个快捷方式的快捷方式,然后我只需更新快捷方式,但这也不起作用。

我当前的解决方案是有一个批处理文件,其中包含指向当前版本的启动命令,以及该批处理文件的快捷方式。

还有其他人有可能的解决方案吗?

答案1

我首选的方法是两个应用程序。主应用程序您已经拥有。第二个是启动器/更新程序。创建启动器的快捷方式,它会检查配置设置(加密的乱码、xml、纯文本、直接硬编码到启动器中,等等)以获取要启动的可执行文件的路径,然后启动它。一旦主应用程序启动,加载程序就会终止。

每当您获得新版本时,您都会更新启动器的配置文件,然后将来的程序启动将打开新版本。

这是“引导加载程序”式的过程。有一个指向完整应用程序的微型辅助应用程序。客户启动微型应用程序,然后它会将他们引导到正确的完整应用程序。

如果您的启动器检查全尺寸应用程序上的哈希指纹或签名,以确保没有人发挥创造力并尝试从启动器链接到另一个应用程序,则可以获得加分。

答案2

听起来像是一个遗留应用程序。最好的办法是不要让它过于复杂,只需安排停机时间进行更新即可。

答案3

我同意 DanBig 的观点,在你这种简单的情况下,除非你想对它进行大量的改造(就像 Ruscal 建议的那样,这是一个好主意),否则只需安排一次“停机”,打开文件锁并替换 .exe 文件(可能是在夜间或周末)。

“我想在用户桌面上放置一个指向应用程序最新版本的快捷方式” - OP

至于将它们放在桌面上,为什么不让您的快捷方式指向 z:\Apps\ApplicationX\ 并将当前 EXE 放在那里呢?然后根据需要为过去的修订/版本设置子文件夹,如 z:\Apps\ApplicationX\revisions。这样,客户端快捷方式就不会改变,在更新期间,您只需将现有的 exe 移动到 rev# 文件夹中,并将新的/更新的 .exe 放入 z:\Apps\ApplicationX\ 文件夹中。

答案4

您可以使用在 Linux 上运行的 Samba 服务器。当您需要更新应用程序时,只需重命名“当前”文件夹并创建一个名为“当前”的新文件夹。共享必须是只读的。

在 Linux(Unix)上允许重命名或删除文件,并且打开了文件的进程将能够使用旧版本,直到文件描述符关闭。

相关内容