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

时间:2014-01-05 06:45:00

标签: c# wpf deployment .net-4.0

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

2 个答案:

答案 0 :(得分:1)

我已经使用我们内部运行的应用程序完成了这项工作。

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

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

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

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

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

答案 1 :(得分:1)

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

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

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

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

修改

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