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

pro*_*dad 8 .net clickonce crystal-reports

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

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

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

cod*_*ion 11

没有.对ClickOnce和先决条件存在很多困惑.

ClickOnce对prereqs 没有任何作用.没有.ClickOnce将文件从服务器复制到客户端的计算机,并在更新服务器文件时保持这些文件同步 - 就是这样.它无法将内容放入GAC,注册dll,安装msi文件等.

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

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

如果他们没有运行引导程序,他们会得到的错误很像你要问的问题.

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

祝好运!如果您想出更好的解决方案,请回复.