【问题标题】:Windows Forms DeploymentWindows 窗体部署
【发布时间】:2009-12-23 16:32:55
【问题描述】:

我正在编写一个 Windows 窗体应用程序,该应用程序将出售给中小型公司并供 LAN 上的用户使用。

为了让网络管理员更轻松,我正在考虑使用 .Net 3.5 SP1 并让应用程序从网络共享运行。这样,客户端安装最少(我知道他们必须安装 .Net 3.5 SP1)。

管理员将在服务器中安装应用程序,运行 Windows 安装程序,然后通过电子邮件向用户发送网络路径的路径,以便他们可以开始使用该应用程序。另一种方法是让管理员在数百台 PC 上安装应用程序,我尽量避免这样做。每次我更新应用程序时,管理员只需在单个服务器上重新安装它。

此外,该应用将附加一个 SQL Express 数据库来存储其数据,或者可以将其配置为访问外部 SQL 服务器(同一 LAN)。

如果您使用这种部署,我想听听您的意见,有什么陷阱以及我应该注意什么。

我有点担心 .Net 3.5 SP1 的渗透,但我一直在使用 LINQ to SQL,所以我认为我别无选择。

提前致谢。

【问题讨论】:

    标签: .net-3.5 deployment winforms


    【解决方案1】:

    不是个好主意。大多数地方要么足够小,可以在每个工作站上运行安装程序(并且是标准做法),要么已经能够执行自动安装。

    最好的办法是坚持使用标准 MSI 包,让客户决定如何使用旨在处理 MSI 的现有工具来部署它。

    您可以加入一些自动更新逻辑,或使用 Click Once 部署,但它们都有问题。

    【讨论】:

    • Bryan,如果您是一家拥有 250 名用户的公司的网络管理员,您会购买必须安装在 250 台 PC 上的软件还是找借口不购买?
    • 我尽量避免安装客户端。对于我试图取悦的管理员来说,这是一个令人头疼的维护问题
    • 不,我有一些东西可以让我自动将 MSI 部署到计算机上。这是一个已经通过多种方式解决的问题。
    【解决方案2】:

    您能否摆脱使用 OneClick 部署?有一些陷阱需要注意,但它应该处理自动更新。

    稍强的方法是安装一个自我更新的 EXE(因此它会在加载最终应用程序之前进入数据库检查发布的版本,下载所需的程序集)。

    【讨论】:

      【解决方案3】:

      看看这里: http://weblogs.sqlteam.com/jhermiz/archive/2007/08/14/60284.aspx

      在 CLR 上运行的 .net 框架程序使用 CAS(代码访问安全)。这意味着您不再为网络上的用户/组分配权限。相反,您将信任分配给程序员开发的实际代码。基本上,您的应用程序程序集文件与机器的安全策略进行比较。当您在本地机器上运行您的应用程序并且它运行得非常好时,这是因为您在 MyComputer 区域中运行您的代码。默认情况下,MyComputer 区域具有 FullTrust(不受限制的权限)几乎可以做任何事情。这就是为什么该应用程序可以在您的本地 PC 上正常运行的原因......现在为什么它不能在服务器上运行。

      您的应用程序在服务器上保释,因为服务器的限制性更强,因为它的区域是 LocalIntranet 区域,它不完全信任任何人都可以从任何机器运行可执行文件。此外,它更加安全(从现在开始,这就是 microsoft security 背后的全部理念,使其更加安全)。这也更有意义,因为现在没有人可以将可执行文件扔到共享的服务器中并运行它们。

      有几种方法可以避免这种情况。你可以用正确的方法来做这件事,这需要更长的时间,看起来更复杂一些,或者你可以用另一种方法来做,更快,但做法很差,而且存在安全漏洞。

      这两种方式是:

      • 创建一个强名称密钥并使用它 在您的应用程序 AssemblyInfo.vb 文件
      • 将安全策略修改为完全 信任 LocalIntranet 区域

      【讨论】:

      • 罗伯特,我知道 CAS,但以这种方式“触摸”工作站是否明智?
      • 编辑:如果可能,我会尽量避免安装客户端。对于我试图取悦的管理员来说,这是一个令人头疼的维护问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多