31

我有几个 .NET Windows 窗体应用程序,我正准备将它们转换为ClickOnce /smart-client 部署方案。我已经阅读了这不是很好的教程,但是我应该注意哪些陷阱或“陷阱”?

有几个小应用程序断断续续地使用,但主要应用程序是 C#,24/7 运行,相当大,但每隔几周才会更改一次。它还本地写入日志文件并与本地硬件设备对话。

4

11 回答 11

12

以下是我知道的一些。

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

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

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

  4. .NET 3.5 SP1 开始,您不再需要签署部署清单,这使得将部署移动到新服务器变得更加容易。

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

于 2008-09-29T17:21:47.097 回答
9
  • 部署更新后,内置对话框将使其看起来好像正在重新下载整个应用程序。事实上,只有更改的 DLL 正在下载,并且显示的进度条是误导/错误的。不要浪费时间试图弄清楚为什么要重新部署所有程序集,结果却发现它们实际上并非如此。不是我那样做或任何事情。
  • 当您用于签署原始部署清单的证书过期并且您获得了新的证书时,您将陷入困境(客户端都需要卸载并重新安装)。细节尽在马口
于 2008-11-16T04:39:28.683 回答
7

大多数问题已得到解决,但有几个人提到无法创建桌面快捷方式。事实上,您可以使用 Visual Studio 2008 SP1 创建桌面快捷方式

此外,如果您使用的不是最新版本的 Visual Studio,您始终可以编写代码来创建已安装的开始菜单快捷方式的快捷方式

于 2008-09-30T14:11:47.077 回答
6

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

我从互联网内部的某个地方听到传言说,未来版本的 ClickOnce 将消除一些这种令人头疼的问题。

于 2008-09-29T17:23:02.647 回答
4

ClickOnce 的缺陷之一是您无法安装到GAC。如果您想安装多个共享 DLL 文件的应用程序,这是一个问题。每个应用程序都需要 DLL 文件的本地副本。此外,多个用户安装已结束。请参阅比较 Window Installer 和 ClickOnce 的列表

于 2008-09-29T17:22:14.457 回答
4

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

于 2008-11-28T08:25:32.620 回答
3

您无法使用 ClickOnce 应用程序做很多事情,例如安装到用户桌面的快捷方式或在安装应用程序的位置设置任何sayo。对于某些人来说,这些是破坏交易的人。

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

对于一个简单的应用程序(即不是Microsoft Word,而是一个快速而肮脏的应用程序来做某事)并且需要大量定期部署,ClickOnce 非常棒。但是您很快就遇到了“哦,ClickOnce无法做到这一点,请选择MSI或其他)的墙。

于 2008-09-29T17:23:06.733 回答
3

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

那是因为您将获得较低的信任级别。.NET Framework 开发人员指南:ClickOnce 部署和安全性中的更多信息。

我最大的问题是无法使用机器密钥加密配置文件的某些部分,因为您无权访问该密钥(考虑到保护该密钥是有意义的)。

于 2008-09-29T17:23:14.067 回答
3

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

桌面图标通过代码来完成是相当简单的,并且如前所述,在3.5 SP1中,已经嵌入 - 所以这不再是一个问题。

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

于 2008-11-16T04:23:36.653 回答
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
}
于 2009-02-12T16:08:36.327 回答
1

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

于 2010-08-06T20:11:38.517 回答