2011-06-02 34 views
2

我創建了一個通過«ClickOnce»部署/安裝的Winform應用程序。Setup.exe的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框架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」文件......這當然,該對話框在方案一中未顯示。 爲什麼向用戶提示「保存對話框」?

我敢肯定,我俯瞰的東西在這裏...

回答

1

1)除非你選擇,讓他們應用程序之前安裝自動生成的publish.htm文件不包括你的必備組件的安裝。只要在項目的「發佈」選項卡上的「先決條件」屏幕上指定先決條件,發佈過程就會更改安裝頁面的外觀並修改從頁面啓動的安裝過程。

如果您沒有指定任何先決條件(即使您的應用程序需要它們),發佈者將生成包含應用程序名稱,發佈者和簡單安裝鏈接的第一頁。如果您指定了任何先決條件,則會生成第二個頁面。

2.)系統提示用戶下載setup.exe文件,因爲可執行文件是一個特殊的應用程序,它驅動必要的先決條件的安裝過程。如果你沒有設置你的應用程序來自動安裝你的先決條件(如你的第一種情況),安裝鏈接與第二個安裝頁面上的「啓動」鏈接相同。

如果您檢查啓動鏈接(或第一個方案的安裝鏈接),您將看到鏈接指向的文件名爲「yourProject.application」。 .application文件是Microsoft安裝程序用於下載,安裝和更新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

首先,確保您使用的是Internet Explorer。 ClickOnce將與其他瀏覽器一起使用,但如果您在瀏覽器之間切換,則可能會在html頁面中獲得不同的行爲。堅持IE進行測試。

現在,瞭解發生了什麼。引導程序.exe和ClickOnce .application文件是兩個完全不同的東西。單擊指向.exe文件的鏈接將導致「保存文件」對話框彈出。單擊.application文件的鏈接將啓動ClickOnce安裝。他們唯一的領帶是引導程序將在完成時啓動.application文件。

對於大多數先決條件,無法通過網頁告知用戶是否需要安裝它們。你必須依靠他們來知道他們是否需要運行引導程序 - 因此是兩個單獨的鏈接。但是,如果您只需要.NET Framework(和Windows Installer),則有時網頁CAN可以通過UserAgentString判斷它是否已安裝。破解打開生成的html文件並查看javascript。您應該能夠看到使用正則表達式檢查UserAgentString的代碼,然後更改「安裝」按鈕鏈接並根據找到的內容隱藏它們。