将.EXE
部署到网络驱动器并让用户通过网络执行.EXE
会有什么问题?
优点是只需要对一个位置进行升级。有什么缺点?
答案 0 :(得分:5)
我会考虑为您的应用程序和组策略创建一个MSI(http://en.wikipedia.org/wiki/Windows_Installer)文件,以便于在整个公司内进行分发(http://support.microsoft.com/kb/816102)。
有许多免费软件MSI工具。想到的好事是http://www.advancedinstaller.com/和http://wix.codeplex.com/
答案 1 :(得分:4)
EXE是一回事,但您还需要考虑可能与该应用关联的任何DLL和其他共享资源。
某些DLL可能随EXE一起提供 - 您必须使用EXE将它们放在远程驱动器上,如果需要使用它们会导致额外的网络流量。
其他DLL可能是Windows的一部分,但如果您的工作站具有不同版本的Windows甚至不同的服务包或补丁,则可能存在版本问题,但它们都运行该应用程序的通用版本。
那么许可呢?应用程序的许可证实际上是否允许您将其安装在网络驱动器上 - 许多软件公司都非常关注此类事情,因此如果您不想被抓住,您需要非常小心。
简而言之,获得部署管理的快速获胜听起来是一个好主意,但它可能会导致比它解决的问题更多的问题。
如果您真的想沿着这条路走下去,您可能应该考虑远程桌面(例如Citrix或终端服务器)之类的替代品或类似的东西 - 有更好的方法来实现您的目标,而不仅仅是将所有内容都放在网络驱动器上
答案 2 :(得分:3)
一个问题是文件锁定。在Windows环境中,如果用户直接从网络共享执行应用程序,则应用程序的文件将被锁定。如果有人将应用程序保持打开状态,这可以防止应用程序使用较新版本进行更新。
您可以通过在更新应用程序之前禁用网络共享然后再次启用它来解决此问题。
答案 3 :(得分:1)
对于我们的程序,我们决定反对共享的exe。我们认为支持更难(IT需要在更新之前杀死用户解锁文件,用户不知道exe在网络上的位置,共享\网络文件权限需要由IT修改等)并且我们应该模仿尽可能在其他程序的行为(客户端软件通常安装在客户端上)。
答案 4 :(得分:1)
如果使用对象能力安全模型编写应用程序,则按照Mark S. Miller博士的定义。论文,Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control,那么你就不会有任何安全缺陷。
另一方面,“缺点”是您现在必须通过对象图管理访问控制。应用程序应该只能访问您提供的任何权限。正如一些人已经提到的,Windows有一个基本的保护策略,它可以锁定应用程序文件,从而防止任何人在应用程序实例关闭之前修改EXE。
真的,这里的关键问题是你必须问自己该程序及其组成部分应具备的权限。如果它需要本地用户权限,那么您将不得不围绕该设计进行设计或授予程序权限。
理解这一点,并做得好,不是一件容易的事。
答案 5 :(得分:0)
主要缺点是网络驱动器不可用。
然后,您没有指定的每种语言,EXE都写在事务中。由于.NET在网络驱动器上运行时存在一些安全问题。
答案 6 :(得分:0)
这取决于应用程序的功能。我的应用程序将是一个有问题的网络部署,因为它使用的配置文件都在与EXE相同的文件夹中,或者在子文件夹中。如果每个用户都离开网络,他们可能会修改配置文件并为其他人搞砸。
谢天谢地,我的应用程序只会部署在不同的工作站上。 :)
答案 7 :(得分:0)
他们可能没有安装您的应用所需的所有文件。如果他们不这样做,您将需要创建一个设置。如果它们确实有效并且每个人的驱动器都已正确映射,那么你应该没问题。
答案 8 :(得分:0)
我在工作中运行这样的供应商应用程序。他们没有为它设计,但它没有问题。我有所有的短节指向UNC路径。这个特定的应用程序不使用exe目录中的文件,因此文件锁定不是问题。它还连接到SQL Server以获取数据,因此数据存储也不是问题。 (如果应用程序使用本地SQLite,Access或其他基于文件的数据库,那将是一个主要问题。)
如果您的应用是.Net应用,如果不对每台机器的安全设置进行一些重大修改,这将无法运行,无论如何这可能是个坏主意。如果您正在谈论.Net应用程序,则应使用ClickOnce。我在工作中也使用它作为一些应用程序,它很棒,而且易于使用。
问题是你的问题没有明确的答案,只是一堆“依赖”的资格。重大问题AFAIK正在使用本地文件进行数据存储,无论是文本文件还是数据库。不过,这对于更新来说非常棒,这就是上面提到的应用程序运行的原因。
答案 9 :(得分:0)
这是完全可行的。确保在编译时在Visual Studio设置中设置“从CD-ROM运行”(我认为?)标志 - 这可以防止图像被二进制文件直接支持,因此您可以在人们运行时升级它。我目前没有运行Windows,所以我无法检查,但你也可以为DLL设置这个标志。
这样做的一个问题是,如果您的程序将自己与文件相关联,那么当网络发生变化并且计算机被重命名时,每个人的PC都会像狗一样开始运行。资源管理器倾向于在有趣的时候查询这些东西。
另一个更严重的问题是,如果有人意外地部署了破损版本,那么不仅仅是早期采用者被填充了!
为了轻松生活,我个人推荐XCOPY部署...
答案 10 :(得分:0)
对于.NET应用程序,我们观察到BadImageFormatException我们已经相信来自网络故障(或计算机在关键时刻失去网络连接,例如使用WIFI),同时读取EXE或DLL文件。 / p>
答案 11 :(得分:-1)
恕我直言,这是一个非常糟糕的设计决定。我们在公司有第三方应用程序,其设计与此类似。
为了使程序正常运行,需要对该文件夹进行完全共享;在这种情况下,最糟糕的是该程序在相同的共享文件夹中有一个怪异的DATABASE(是的,当我发现时我也感到震惊)!没有花太长时间,直到有人擦除了该文件夹中没有使用的每个文件,包括数据库当然:)
我真的建议使用客户端 - 服务器方法,即使您必须购买/构建具有自动更新功能的智能安装程序以克服部署问题。