假设在客户端上安装并注册了 *.dll、*.ocx 等组件,就有可能将 *.exe 和一些相关文件放在文件服务器上。要启动应用程序,客户端桌面上有运行\\fileserver\AppPath\exe
.
你同意这样的布局吗?如果“客户端”是终端服务器而“客户端”是指终端服务器场怎么办?
假设在客户端上安装并注册了 *.dll、*.ocx 等组件,就有可能将 *.exe 和一些相关文件放在文件服务器上。要启动应用程序,客户端桌面上有运行\\fileserver\AppPath\exe
.
你同意这样的布局吗?如果“客户端”是终端服务器而“客户端”是指终端服务器场怎么办?
如果应用程序与单个 .exe 文件一样简单(可能带有一堆也可以驻留在同一目录中的支持文件)并且不需要在客户端上进行正确设置,则可以这样做并且效果很好;它还有一个额外的好处,那就是不必担心在每个客户端上部署/维护/更新应用程序。
当然,如果客户端计算机失去网络连接和/或文件服务器出现故障,应用程序将无法使用。
角色分离是在这里应用的一个重要概念。如果您有一个托管用户文档的网络共享,您可以根据它托管的文件类型以及一天中用户可能需要访问它的时间等因素,对该共享应用某些备份、可用性和安全方法。您还知道,如果您必须在白天使托管它的服务器脱机进行维护,您只需要通知您的用户在此期间关闭所有打开的文档。
现在考虑您已将一些软件添加到该文件共享中,用户直接从该共享运行。突然,您将程序数据与用户文件数据一起备份。如果您需要关闭服务器进行维护,您现在会遇到额外的复杂情况(如果服务器在应用程序运行时离线会发生什么情况?)。这是众多示例中的一个示例,您对管理程序的需求和您对管理文件共享的其余部分的需求可能存在不同的冲突。您不能总是提前预测这些类型的冲突,但它往往是导致管理头痛的事情之一。
所以这就是为什么你应该在可行的情况下将职能和角色分开,如果它们的特征不同,或者将来可能会出现分歧。它更加优雅和可支持,更少令人讨厌的惊喜。
举一个真实的例子:在我以前工作过的一家公司,我们有一个通用的文件和打印服务器,我们运行 Lotus Notes/Domino 的群件。所有用户的 Lotus Notes 安装都托管在文件和打印服务器上的文件共享上,并直接从中运行。我相信这最初是为了能够升级 Notes 一次,并让所有客户端自动更新。也许在某一时刻这有效。
但实际情况是,一个单一的网络故障(可能每周一次)会将每个 Notes 用户踢出电子邮件,并在共享上生成一个锁定文件,需要管理员手动删除该文件。当“电子邮件关闭”时,人们会真正注意到。该软件的加载速度也很慢,尤其是在早上有 150 个用户同时尝试加载单个 .exe 时的第一件事。最重要的是,Notes 升级仍然需要访问每台 PC。净收益最终为零或负数,尽管我认为它最初看起来是节省一些时间的好方法。
至于您的具体问题……您实际上想通过这样做来实现什么?如果您的 .exe 是在内部创建并经常更新的,而您的开发人员只是想要一种更快的方式来发布他们的更新......请小心。在用户仍在访问 EXE 时更换它可能会导致头痛和数据不一致。此外,应以特定方式在终端服务器上加载应用程序,在安装前在 TS 上使用set user /install命令,然后在安装并准备运行时设置 user /execute 。绕过这个过程可能会导致不可预知的结果。
我对文件服务器上的可执行文件没有任何问题。它们不在那里执行,它们在客户端上执行,因此不会比该服务器上可能存在的任何其他文件带来更大的风险。这些文件毕竟只是作为文件,而不是作为可执行程序。
当涉及到终端服务器时,情况就不同了。然后可执行文件在服务器上运行,而不是在客户端上。但是,由于终端服务器正是为该角色而设计的,因此除了确保使用正确的方法安装任何需要安装的应用程序(而不是简单地复制)之外,没有任何问题。
根据应用程序的构建方式,这可能比看起来要复杂得多,只是单个 exe 的东西可能需要一些帮助才能使其从非本地驱动器运行。有关您可能面临的一种问题的讨论,请参阅.Net Code Access Security 上的 Stack Overflow Question 。
有一些非常强大的应用程序流解决方案可以为您提供同样易于管理的好处(Citrix XenApp 可以做到这一点,VMware ThinApp ..)。这些为复杂的应用程序提供了可管理的解决方案,但需要付出一定的代价。对于表现良好的简单应用程序,您的解决方案可能很方便,但您必须小心表现良好的部分。