2009-06-09 63 views
8

我有一個使用Crystal Reports的.NET項目。該應用程序使用ClickOnce分發。如果用戶在他們的計算機上安裝了Crystal,情況會很好。但是,並非所有最終用戶都在其計算機上安裝了Crystal Reports。這些用戶正在收到以下錯誤....NET ClickOnce不安裝必備文件?

「無法安裝或運行該應用程序。該應用程序需要首先在全局程序集緩存(GAC)中安裝程序集CrystalDecisions.ReportAppServer.XmlSerialize V10.5.3700.0。」

有沒有辦法強制ClickOnce安裝以確保安裝先決條件?

+0

您是否將Crystal Reports作爲ClickOnce發佈設置中的先決條件的一部分? – 2009-06-09 19:42:43

回答

11

不,對ClickOnce和先決條件存在很多混淆。

ClickOnce does nothing with prereqs。沒有。 ClickOnce將文件從服務器複製到客戶機,並在服務器文件更新時保持這些文件同步 - 就是這樣。它不能將東西放入GAC,註冊dll,安裝msi文件等。

出現混淆的地方是使用Visual Studio進行部署時。當你發佈的時候,VS會爲你做幾件事情,這與ClickOnce無關。首先,它爲您創建一個很好的html頁面,並提供一些指向您的部署的鏈接。此外,它可以讓你從幾個先決條件中挑選,併爲你創建一個引導程序exe。我假設你爲Crystal Reports安裝做了這個。引導程序只是管理多個前提條件的簡單方法。而不是告訴你的用戶在安裝你的應用程序之前安裝X,然後是Y,然後是Z,引導程序使這三個安裝「無縫」,因此它們看起來好像是一個大的安裝。如果用戶已經擁有它,它也可以跳過prereq安裝。

如果你關注VS生成的html頁面,你可以看到兩個鏈接。一個給你的.application文件(ClickOnce部署),另一個給引導程序exe。你幾乎處於用戶的擺佈之中,必須依靠他們來閱讀頁面並在需要時運行引導程序。一個例外就是.Net框架,因爲html頁面可以通過UserAgent字符串來檢查。

如果他們不要運行引導程序,他們會得到很像你所問的錯誤。

一個可能的解決方案是編寫代碼來檢查它是否安裝。它可以檢查註冊表或「Program Files」文件夾;無論您需要做什麼來確保安裝。然後優雅地退出並通知用戶他們是否沒有它。只要您在嘗試加載和使用Crystal程序集之前進行檢查,就會有效。

祝你好運!如果您想出更好的解決方案,請回復。

+1

Whatknott,我讀了你的其他一些帖子,並覺得我有更好的理解。感謝您確認並解釋此主題。 – proudgeekdad 2009-06-10 01:21:44

-1

在先決條件中,選擇.Net Framework的Crystal報表(不適用於Visual Studio的Crystal報表)併發布。