我有几个。净 Windows形式 应用程序,我准备转换成 ClickOnce/智能的客户的部署方案。我读的不是这个伟大的教程,但有缺陷或"陷阱",我应该知道的吗?

有几个小的应用程序的使用和关闭,但主要应用是在C#、运行24/7,是相当大的,但只有改变,每隔几个星期。它还写到日志文件locallly和谈判,以当地的硬件设备。

有帮助吗?

解决方案

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

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

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

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

  4. .NET 3.5 SP1起,您无需签署部署显示,使部署更容易移动到新服务器。

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

其他提示

  • 当更新部署,建立对话将使它显示,如果整个应用程序正在重新下载。事实上,只有改变Dll正在下载,和进度条会显示是一种误导/错误的。不要浪费时间,试图找出为什么所有的组都正在重新部署只发现他们实际上不是。不,我没有,或者任何东西。
  • 当证书用于签发的原始部署清单到期,你都发出一个新的一个,你是在一个世界的伤害(客户将所有需要的卸载和重新安装).详细信息 在马的嘴.

大多数问题已得到解决,但有些人提到无法创建桌面快捷方式。事实上,你 < em>可以使用Visual&nbsp; Studio&nbsp; 2008 SP1 创建桌面快捷方式。

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

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

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

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

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

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

使用 3.5 SP1 <,通过代码可以轻松完成桌面图标。 / a>,烘焙 - 这不再是一个问题。

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

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

那是因为你会获得较低的信任等级。有关详细信息,请参阅 .NET Framework开发人员指南:ClickOnce部署和安全性

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

我不知道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
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top