.NET ClickOnce 没有安装必备文件?

Posted

技术标签:

【中文标题】.NET ClickOnce 没有安装必备文件?【英文标题】:.NET ClickOnce not installing prerequisite files? 【发布时间】:2009-06-09 18:13:03 【问题描述】:

我有一个使用 Crystal Reports 的 .NET 项目。该应用程序使用 ClickOnce 分发。如果用户在他们的计算机上安装了 Crystal,那么一切都会很好。但是,并非所有最终用户的计算机上都安装了 Crystal Reports。这些用户收到以下错误...

“无法安装或运行该应用程序。该应用程序要求首先在全局程序集缓存 (GAC) 中安装程序集 CrystalDecisions.ReportAppServer.XmlSerialize 版本 10.5.3700.0。”

有没有办法强制安装 ClickOnce 以确保安装了先决条件?

【问题讨论】:

您是否将 Crystal Reports 作为先决条件的一部分包含在 ClickOnce 发布设置中? 【参考方案1】:

没有。 ClickOnce 和先决条件存在很多混淆。

ClickOnce 对先决条件什么都不做。没有。 ClickOnce 将文件从服务器复制到客户端计算机,并在服务器文件更新时保持这些文件同步 - 就是这样。不能在GAC里面放东西,不能注册dll,不能安装msi文件等等。

当您使用 Visual Studio 进行部署时,就会出现混淆。当您发布与 ClickOnce 无关的内容时,VS 会为您做几件事。一方面,它为您创建了一个漂亮的 html 页面,其中包含一些指向您的部署的链接。此外,它还允许您从几个先决条件中进行选择,并为您创建一个引导程序 exe。我假设您是为 Crystal Reports 安装执行此操作的。引导程序只是管理多个先决条件的一种简单方法。引导程序不是告诉您的用户在安装您的应用程序之前先安装 X,然后是 Y,然后是 Z,而是让这三个安装“无缝”,因此它们看起来好像是一个大安装。如果用户已经拥有它,它也可以跳过 prereq 安装。

如果你注意你VS生成的html页面,你可以看到两个链接。一个到您的 .application 文件(ClickOnce 部署),一个到引导程序 exe。您几乎受制于用户,并且必须依靠他们来阅读页面并在需要时运行引导程序。 .Net Framework 是一个例外,因为 html 页面可以通过 UserAgent 字符串检查。

如果他们运行引导程序,他们会得到与您所询问的错误非常相似的错误。

一种可能的解决方案是编写代码来检查它是否已安装。它可以检查注册表或“程序文件”文件夹;无论您需要做什么来确保它已安装。然后优雅地退出并通知用户如果他们没有它。只要您在尝试加载和使用 Crystal 程序集之前进行检查,这将起作用。

祝你好运!如果您提出更好的解决方案,请回复。

【讨论】:

Whatknott,我阅读了您的其他一些帖子,感觉自己理解得更好了。感谢您确认和解释这个话题。 欢迎您。我记得在使用 ClickOnce 时遇到了所有相同的问题和挫败感。我希望我为您减轻了一点的痛苦:)【参考方案2】:

在 Prerequistes 中,选择 Crystsal Report for .Net Framework(不是 Crystal Report for Visual Studio)并发布。

【讨论】:

以上是关于.NET ClickOnce 没有安装必备文件?的主要内容,如果未能解决你的问题,请参考以下文章

当最终用户正在安装所需的 .NET 运行时时,ClickOnce 应用程序发布失败

ClickOnce 和 .NET 5:用户设置未更新

ClickOnce 先决条件 - 如何管理先决条件的安装顺序?

网安必备之kali linux虚拟镜像安装

如何通过 CruiseControl.NET 发布 ClickOnce 应用程序?

发布时在 clickonce 应用程序中签署可执行文件