ClickOnce部署问题

alf*_*and 16 .net clickonce prerequisites

我正在开发一个使用ClickOnce部署的项目,我正在经历几个问题.

我的软件解决方案中有两个组件:一个需要运行.NET framework 3.5 的桌面客户端,以及一个列出可用文档的服务器(ASP.NET应用程序),并提供了一种使用ClickOnce安装桌面客户端的方法.

我的第一个问题是前提条件:我需要一种在客户端安装之前安装3.5框架的方法.Visual Studio创建了一个处理setup.exe它的东西,但是为了使它工作,它必须直接运行(而不是链接到.application文件),并且在创建ClickOnce清单时必须知道部署URL.

所以我还有两个问题:显然没有办法在安装后使用查询字符串参数运行客户端应用程序setup.exe,所以不要让服务器显示链接到像".../client.application"这样的URL的文档列表. document = doc1"我只能链接到setup.exe.

另一个问题是最糟糕的:服务器旨在用于相对较小的专用网络,而不是用于单个Web服务器.问题是:我在构建时不知道ClickOnce客户端的部署URL,因此在setup.exe选中"从网站安装"选项时无法正常运行.目前,解决方法是使用脱机安装程序,其中包含setup.exe大型ZIP文件中的先决条件和ClickOnce部署文件.

具有适当框架版本的用户仍然可以使用.application带有查询字符串的链接来安装/更新客户端并打开文档.没有框架的用户会收到错误消息("系统更新需要blablabla 3.5.0.0 blabla GAC"),并且必须下载ZIP文件,将其解压缩到本地计算机并运行setup.exe文件以安装框架,然后客户端.之后,他必须返回文档列表并使用链接以适当的参数启动客户端.

毋庸置疑,我对这一策略并不感到自豪,这种策略破坏了ClickOnce的所有部署优势.

是否有可能以更优雅的方式摆脱先决条件问题?在网络中部署服务器时是否有一种简单的方法来修改ClickOnce应用程序的安装URL(比如在配置文件中写入URL)?

Gre*_*leM 6

我也一直试图解决"我不知道clickonce客户端在构建时的部署URL"问题.

我能做到的最好(我刚刚开始写它,所以这仍然是猜测)是编写一个最终用户将运行的实用程序,它将设置deploymentURL.这在.NET中似乎是可能的,但您需要:

  • 使用ManifestReader.ReadManifest读入清单
  • 设置DeploymentUrl
  • ManifestWriter.WriteManifest

然后,您必须使用SecurityUtilities.SignFile再次签署清单

签约过程困扰着我.要么我必须使用一次性证书(这使得签名毫无意义)或者我需要使用来自CA的证书然后我必须分发我的密码以便重新签署清单(这是愚蠢的,因为它使我的证书不安全) .所以我似乎留下了用户看到"Unknown Publisher"和黄色感叹号......


Eve*_*zon 5

为了在我们的持续构建系统中构建ClickOnce应用程序并部署到多个测试服务器,我花了一些时间与Mage和文章演练:手动部署ClickOnce应用程序.

我不确定这是否会解决您的第二个问题,但如果您部署到多个服务器,它至少可能会从构建过程中消除一些痛苦.如果您可以分发mage.exe(不确定Microsoft是否允许),您可以在安装期间在现场修改清单.