我有几个.NET Windows窗体说我准备转换成应用程序的ClickOnce /智能客户端部署方案。 我读过isn't,这个伟大的教程,但是否有缺陷或“陷阱”,我应该知道的?
有使用和关闭一些小的应用程序,但主要应用在C#中,运行24/7,是相当大的,但只有改变每隔几个星期。 它也写入locallly一个日志文件,并谈到本地硬件设备。
我有几个.NET Windows窗体说我准备转换成应用程序的ClickOnce /智能客户端部署方案。 我读过isn't,这个伟大的教程,但是否有缺陷或“陷阱”,我应该知道的?
有使用和关闭一些小的应用程序,但主要应用在C#中,运行24/7,是相当大的,但只有改变每隔几个星期。 它也写入locallly一个日志文件,并谈到本地硬件设备。
这里有一些我所知道的。
不能把桌面上的图标。 你现在可以。
我不能为所有用户安装。
我需要赴汤蹈火在部署移动到不同的服务器。 这不是一个问题,如果你在内部发展,用户可以看到你发布到,或者如果您部署到公共Web服务器,但如果你需要独立推出多个客户站点它也不是很大。
由于.NET 3.5 SP1您不必再签署部署清单,这使得它更容易部署移动到新的服务器。
我不能安装在组件GAC 。 您可以通过创建普通安装软件包是ClickOnce应用程序的先决条件,解决这个问题。
大多数问题已经得到解决,但有几个人提到不能够创建桌面快捷方式。 事实上,你可以创建与Visual Studio 2008 SP1的桌面快捷方式 。
另外,如果您使用的不是最新版本的Visual Studio,你总是可以编写代码来创建一个快捷方式安装的开始菜单快捷方式 。
我们有我们要部署为一个ClickOnce应用程序的应用程序。 我们需要用户能够修改在安装某些设置(如部署路径 - IT希望从他们的网络共享,在制作的时候不知道可以提供文件服务)。 当您更改的任何文件在您的部署,您需要重新计算所有散列值,并重新签署一切。 所以,如果这个解决方案是内部的,您可能没有绕过签名证书的问题,但如果这是客户端,您将需要建筑师看中的解决方案来绕过这个问题。
我听到从某处互联网络的肠子内传言说的ClickOnce的未来版本将删除一些这方面的头痛。
你不能静默卸载的ClickOnce部署的应用程序。 此外,我认为这是不可能的参数添加到启动快捷方式。
一个使用ClickOnce的缺陷之一是,你不能安装到的事实GAC 。 如果你想安装共享DLL文件的多个应用程序,这是一个问题。 每个应用程序都需要的DLL文件的本地副本。 此外,多个用户安装都出来了。 见窗安装程序比较ClickOnce的列表 。
如果有人提到这一点在搜索,我们发现有很多客户关注的是缺乏安全的“分配”他们的应用程序。 应用程序必须在公共场所提供 - 没有任何身份验证 - 它能够检查更新。 唯一的例外是,如果您有Windows NT身份验证。 我想保护ClickOnce应用程序解释了我的意思。
桌面图标是相当琐碎通过代码来完成,并且提到,有3.5 SP1 ,在烤-这样不再是一个问题。
还有用的XmlSerializer不固定错误 - 它不会在某些情况下,正确部署。 一个简单的解决方法是手动将此文件添加到部署。 皮塔饼,但它是很容易的......它可以是令人震惊的,当你部署突然出现故障,但...
还有一大堆的东西你不能ClickOnce应用程序做的,像安装一个快捷方式到用户的桌面,或在应用程序被安装在那里的任何sayso。 对于一些人来说这些都是dealbreakers。
此外,它已经有一段时间,因为我用它,但有可以用来找出并显示的ClickOnce版本/版本号,这是从应用程序的版本独立/ build号的特殊方式。 你必须做一个try / catch,如果的ClickOnce版本/内部版本号抛出一个异常,那么应用程序没有运行作为一个ClickOnce部署的应用程序(也就是,它的运行作为一个定期编制应用程序或从Visual Studio)。
对于一个应用程序,它是简单的(即不是微软的Word ,而是一个快速和肮脏的应用做一些事情),并需要大量的常规部署,ClickOnce是伟大的。 但你相当迅速打“哦,这不能被做的ClickOnce,请选择微星还是其他什么东西)的墙。
你会比你的正常的.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
}
如果客户端在需要身份验证的代理,则无法安装。