.NET中ClickOnce /智能客户端部署的陷阱/陷阱

时间:2008-09-29 17:16:20

标签: .net winforms clickonce smartclient

我有几个.NET Windows Forms应用程序,我准备转换为ClickOnce /智能客户端部署方案。我已经阅读了这个非常棒的教程,但是我应该注意哪些陷阱或“陷阱”?

有几个小应用程序一直使用,但主要应用程序是在C#中,每周7天,每天24小时运行,非常大,但每隔几周才会更改一次。它还会本地写入日志文件并与本地硬件设备进行通信。

11 个答案:

答案 0 :(得分:12)

以下是我所知道的一些内容。

  1. 无法在桌面上放置图标。您现在可以。

  2. 我无法为所有用户安装。

  3. 我需要通过箍来将部署移动到其他服务器。如果您在内部开发,并且用户可以看到您要发布到的服务器或者您要部署到公共Web,这不是问题,但如果您需要独立地部署到多个客户站点,那就不是很好了。

  4. .NET 3.5 SP1开始,您不再需要对部署清单进行签名,这样可以更轻松地将部署移动到新服务器。

  5. 我无法在GAC中安装程序集。您可以通过创建ClickOnce应用程序先决条件的常规安装包来解决这个问题。

答案 1 :(得分:9)

  • 部署更新时,内置对话框会使其显示为正在重新下载整个应用程序。实际上,只下载了更改的DLL,并且显示的进度条误导/错误。不要浪费时间试图弄清楚为什么所有组件都被重新部署只是为了发现它们实际上并非如此。不是说我做了那样或者其他什么。
  • 当您用于签署原始部署清单的证书过期并且您获得一个新证书时,您将面临一个受伤的世界(客户端都需要卸载并重新安装)。详情are at the horse's mouth

答案 2 :(得分:7)

大部分问题已得到解决,但有些人提到无法创建桌面快捷方式。事实上,你是can create a desktop shortcut with Visual Studio 2008 SP1

此外,如果您没有使用最新版本的Visual Studio,则始终可以write code to create a shortcut to the installed start menu shortcut

答案 3 :(得分:6)

我们有一个应用程序,我们将部署为ClickOnce应用程序。我们需要用户能够修改安装中的某些设置(例如部署路径 - IT希望从其网络共享中提供文件,而不是在构建时知道)。更改部署中的任何文件时,需要重新计算所有哈希值,并重新签名所有内容。因此,如果此解决方案是内部的,您可能不会在传递签名证书时遇到问题,但如果这是针对客户端的,则需要构建一个花哨的解决方案来绕过此问题。

我从互联网的某些地方听到过隆隆声,未来版本的ClickOnce将消除一些令人头疼的问题。

答案 4 :(得分:4)

ClickOnce的一个缺陷是您无法安装到GAC。如果要安装共享DLL文件的多个应用程序,则会出现此问题。每个应用程序都需要DLL文件的本地副本。此外,还有多个用户安装。请参阅the list comparing Window Installer to ClickOnce

答案 5 :(得分:4)

您无法以静默方式卸载ClickOnce已部署的应用程序。另外我认为不可能在启动快捷方式中添加参数。

答案 6 :(得分:3)

使用ClickOnce应用程序可以做很多事情,例如安装用户桌面的快捷方式,或者在安装应用程序的地方有任何说法。对于某些人来说,这些都是破坏者。

自从我使用它以来已经有一段时间了,但是有一种特殊的方法可以用来计算和显示ClickOnce版本/内部版本号,它与应用程序的版本/内部版本号分开。您必须执行try / catch,如果ClickOnce版本/内部版本号引发异常,则应用程序不会作为ClickOnce部署的应用程序运行(即,它作为常规编译的应用程序或从Visual Studio运行)。

对于一个简单的应用程序(即,不是Microsoft Word,而是一个快速而肮脏的应用程序来执行某些操作)并且需要大量定期部署,ClickOnce非常棒。但你很快就碰到了“哦,这不能通过ClickOnce完成,请选择MSI或其他东西。”

答案 7 :(得分:3)

与普通的.NET应用程序相比,您的系统访问权限更少。

那是因为你会获得较低的信任等级。有关 .NET Framework Developer's Guide: ClickOnce Deployment and Security 的更多信息。

我最大的问题是,使用机器密钥加密配置文件的各个部分是不可能的,因为您无法访问该密钥(当您考虑它时,保护该密钥是有意义的)

答案 8 :(得分:3)

如果有人在搜索中提到这一点,我们发现许多客户担心缺乏安全性“分发”他们的应用程序。该应用程序必须在公共场所可用 - 无需任何身份验证 - 以便能够检查更新。唯一的例外是如果您有Windows NT身份验证。我认为 Securing ClickOnce Applications 解释了我的意思。

桌面图标通过代码进行操作非常简单,如上所述,使用3.5 SP1进行烘焙 - 因此不再是问题。

xmlSerializer仍然存在未修复的错误 - 在某些情况下,它无法正确部署。一个简单的解决方法是手动将此文件添加到部署中。 PITA,但它很容易......当您的部署突然失败时,可能会感到震惊......

答案 9 :(得分:3)

我不知道SP1允许您创建桌面图标 以下是我们一直在做的事情(现在被称为“艰难的方式”):

try
{
    string company = string.Empty;
    string product = string.Empty;
    if (Attribute.IsDefined(asm, typeof(AssemblyCompanyAttribute)))
    {
        AssemblyCompanyAttribute asCompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute));
        company = asCompany.Company;
    }
    if (Attribute.IsDefined(asm, typeof(AssemblyProductAttribute)))
    {
        AssemblyProductAttribute asProduct = (AssemblyProductAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyProductAttribute));
        product = asProduct.Product;
    }
    if (!string.IsNullOrEmpty(company) && !string.IsNullOrEmpty(product))
    {
        string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            product + ".appref-ms");
        string shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
            Path.Combine(company, product + ".appref-ms"));
        File.Copy(shortcutPath, desktopPath, true);
    }
}
catch 
{
    // Shortcut could not be created
}

答案 10 :(得分:1)

如果客户端位于需要身份验证的代理后面,则无法安装。