陷阱/陷阱的ClickOnce/智能的客户的部署。净[封闭]
-
02-07-2019 - |
其他提示
- 当更新部署,建立对话将使它显示,如果整个应用程序正在重新下载。事实上,只有改变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,但它很容易......当您的部署突然失败时,可能会感到震惊......
使用ClickOnce应用程序可以做很多事情,例如安装用户桌面的快捷方式,或者在安装应用程序的地方有任何说法。对于某些人来说,这些都是破坏者。
自从我使用它以来已经有一段时间了,但是有一种特殊的方法可以用来计算和显示ClickOnce版本/内部版本号,它与应用程序的版本/内部版本号分开。您必须执行try / catch,如果ClickOnce版本/内部版本号引发异常,则应用程序不会作为ClickOnce部署的应用程序运行(即,它作为常规编译的应用程序或从Visual Studio运行)。
对于一个简单的应用程序(即,不是 Microsoft Word ,而是一个快速而肮脏的应用程序做某事)并需要大量的常规部署,ClickOnce非常棒。但你很快就碰到了“哦,这不能通过ClickOnce完成,请选择MSI或其他东西”。
与普通的.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
}
如果客户端位于需要身份验证的代理后面,则无法安装。