应用程序部署到网络驱动器

我有一个需要在公司网络内运行的.NET 4 WPF应用程序。
应用程序不使用本地文件(它有一个app.config文件,但它只包含一些connection strings )用于数据存储,而是一个中央SQL server数据库。 将应用程序文件放在共享网络驱动器上只是为每个用户创建应用程序可执行文件的快捷方式有什么缺点?
我在以下链接中找到了有关该主题的一些数据,但我无法得到一个明确的答案:
从映射的驱动器或共享文件夹运行.NET程序 – 优点/缺点
从映射的驱动器或共享文件夹运行.NET程序
http://support.microsoft.com/kb/832742
知道使用这种方法后的东西是如何工作的,将应用程序文件复制到本地用户或其他什么事情也很好吗?

我的问题是你为什么要这样做? 为什么不使用单击一次到网络共享来发布.NET应用程序?

当您从网络共享运行应用程序时,程序的副本将加载到客户端计算机上的内存中,对支持文件的请求也将横向网络,以加载到内存中。 除此之外,您还必须检查任何先决条件,并可能会遇到一些故障。

如果您发布到网络共享,则在完成发布向导时,浏览器将打开一个驻留在网络共享上的网页。 只需共享此URL,用户就可以在自己的计算机上“安装”程序。 关于这种方式的最佳部分是更新是自动的,您不必担心在发布更新时中断用户工作流程。

ClickOnce应用程序不需要管理员权限即可安装,并将为用户安装自己的快捷方式。 我已经构建并部署了其中的几个,并且大多数用户对安装过程足够舒服,可以通过电子邮件中的链接访问它。

编辑

只要您确信用户已安装pre-req,您也可以在部署后向.application文件分发快捷方式。 如果应用程序已安装或安装然后启动,它将启动该应用程序。

我用我们内部运行的应用程序完成了这个。

根据设置,.NET可能只是拒绝从网络驱动器加载或执行程序集,因为该可执行文件可能存在安全风险。 所以你的程序可能无法运行,或者在尝试使用DLL时可能会抛出exception。

当您部署更新时,简单地在网络上拥有可执行文件快捷方式的另一个缺点就是。 这些文件很可能会被锁定,你要么必须去每台计算机并确保关闭软件,要么删除用户在服务器上的锁定,这可能很痛苦。 第一次部署后,我在程序中发现了一个错误,并立即发现了这个问题。 躲开它。

我拥有在网络上一个众所周知的位置运行程序所需的所有文件(可配置)。 当新用户需要应用程序时,我只需将所有内容复制到计算机上的某个位置,然后在桌面(或开始菜单,可能是Startup文件夹)上创建快捷方式供他们使用。 然后程序会不时地自动查看该目录中的一些元数据(版本信息),如果它更新,则会自动更新。

除了应用程序可执行文件之外,这还需要单独的可执行文件来更新,以避免执行卷影副本和重新启动 我的应用程序中发生以下基本事情:

  1. 应用程序确定网络驱动器上是否有更新的版本。
  2. 如果是,则更新updater可执行文件,然后使用应用程序的进程ID作为命令行参数启动更新程序,然后自行终止。
  3. updater在继续之前等待它传递给die的进程(因此应用程序可执行文件未被锁定)。
  4. 更新程序更新应用程序文件。
  5. 然后更新程序重新启动应用程序。

我还没有遇到过这个方案的任何问题。