【问题标题】:.NET ClickOnce not installing prerequisite files?.NET ClickOnce 没有安装必备文件?
【发布时间】: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 发布设置中?

标签: .net 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)并发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多