ClickOnce保存Setup.exe的对话框

时间:2011-06-02 15:28:14

标签: clickonce

我创建了一个winform应用程序,它通过«ClickOnce»部署/安装。

当我添加先决条件时,我注意到一种奇怪的行为......

最初,我有以下先决条件:

  • Windows Installer 3.1
  • .Net Framework 3.5 SP 1

发布后,用户会导航到publish.htm文件,他们会看到:

Name:
Version:
Publisher:
and the “Install” link.

点击后,应用程序会自行安装!

现在......如果我决定添加一个额外的先决条件,例如.Net Framework 3.5,我现在有以下内容:

  • Windows Installer 3.1
  • .Net Framework 3.5
  • .Net Framework 3.5 SP 1

发布后,publish.htm文件会在“发布者”部分下方显示另一条消息:

The following prerequisites are required:
    * Windows Installer 3.1
    * .NET Framework 3.5
    * .NET Framework 3.5 SP1
If these components are already installed, you can launch the application now...

问题1) 为什么这条消息突然出现?

问题2) 在我的第二个场景中,如果用户单击“安装”链接,而不是触发应用程序自身安装,则会提示“保存”对话框以保存“setup.exe”文件...当然,该对话框未在场景一中显示。 为什么会向用户提示“保存对话框”?

我确定我在这里忽略了一些东西......

2 个答案:

答案 0 :(得分:1)

1。)自动生成的publish.htm文件不包括先决条件的安装,除非您选择在应用程序之前安装它们。只要在项目的“发布”选项卡上的“先决条件”屏幕中指定了先决条件,发布过程就会更改安装页面的外观并修改从页面启动的安装过程。

如果您未指定任何先决条件(即使您的应用程序需要它们),发布者将生成包含应用程序名称,发布者和简单安装链接的第一页。如果指定任何先决条件,则会生成第二页。

2.。)系统提示用户下载setup.exe文件,因为可执行文件是一个特殊的应用程序,可以驱动必要先决条件的安装过程。如果您尚未将应用程序设置为自动安装先决条件(如第一个方案中所示),则安装链接与第二个安装页面上的“启动”链接相同。

如果检查启动链接(或第一个方案的安装链接),您将看到该链接指向名为“yourProject.application”的文件。 .application文件是Microsoft Installer用于下载,安装和更新ClickOnce应用程序的特殊文件(XML文档) - 这就是Windows Installer 3.1的先决条件。我相信M $决定生成setup.exe文件以驱动先决条件检查和安装过程的原因是因为如果用户的PC没有Windows Installer 3.1或更高版本,它将不知道如何处理.application文件。必须启动可执行文件以检查和安装任何必要的组件,包括Windows Installer的更新版本。

如果您选择不包含任何先决条件,ClickOnce框架会假定您的所有先决条件先前已安装在用户的PC(包括Windows Installer)上,因此可以尝试从.application文件下载并启动安装

同样值得指出的是,ClickOnce应用程序只能从IE安装(好吧,你可以使用Firefox,可能还有Chrome,但用户必须安装一个插件。)这是因为Windows Installer 3.1更新IE以便它知道如何处理.application文件。

答案 1 :(得分:1)

首先,确保您使用的是Internet Explorer。 ClickOnce可以与其他浏览器一起使用,但如果你在浏览器之间切换,你可能会对html页面产生不同的行为。坚持使用IE进行测试。

现在,要了解发生了什么。 bootstrapper .exe和ClickOnce .application文件是两个完全不同的东西。单击指向.exe文件的链接将导致弹出“保存文件”对话框。单击.application文件的链接将启动ClickOnce安装。它们唯一的关系是引导程序在完成时会启动.application文件。

对于大多数先决条件,无法从网页告知用户是否需要安装它们。您必须依赖它们才能知道是否需要运行引导程序 - 因此需要两个单独的链接。

但是,如果您只需要.NET Framework(和Windows Installer),有时网页可以通过UserAgentString判断它是否已安装。破解生成的html文件并查看javascript。您应该能够看到使用正则表达式检查UserAgentString的代码,然后更改“安装”按钮链接并根据它找到的内容隐藏内容。