Dot-Net

.NET ClickOnce 沒有安裝必備文件?

  • December 26, 2010

我有一個使用 Crystal Reports 的 .NET 項目。該應用程序使用 ClickOnce 分發。如果使用者在他們的電腦上安裝了 Crystal,那麼一切都會很好。但是,並非所有最終使用者的電腦上都安裝了 Crystal Reports。這些使用者收到以下錯誤…

“無法安裝或執行應用程序。應用程序要求首先在全域程序集記憶體 (GAC) 中安裝程序集 CrystalDecisions.ReportAppServer.XmlSerialize 版本 10.5.3700.0。”

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

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

ClickOnce 對 prereq 沒有任何作用。沒有什麼。ClickOnce 將文件從伺服器複製到客戶端電腦,並在伺服器文件更新時使這些文件保持同步 - 就是這樣。它不能在 GAC 中放東西,註冊 dll,安裝 msi 文件等。

當您使用 Visual Studio 進行部署時,就會出現混淆。當您發布與 ClickOnce 無關的內容時,VS 會為您做幾件事。一方面,它為您創建了一個漂亮的 html 頁面,其中包含一些指向您的部署的連結。此外,它還允許您從幾個先決條件中進行選擇,並為您創建一個引導程序 exe。我假設您是為 Crystal Reports 安裝執行此操作的。引導程序只是管理多個先決條件的一種簡單方法。在安裝您的應用程序之前,引導程序不會告訴您的使用者安裝 X,然後是 Y,然後是 Z,而是讓這三個安裝“無縫”,因此它們看起來好像是一個大安裝。如果使用者已經擁有它,它也可以跳過 prereq 安裝。

如果您注意 VS 生成的 html 頁面,您可以看到兩個連結。一個到您的 .application 文件(ClickOnce 部署),一個到引導程序 exe。您幾乎受制於使用者,並且必須依靠他們來閱讀頁面並在需要時執行引導程序。一個例外是 .Net Framework,因為 html 頁面可以通過 UserAgent 字元串檢查它。

如果他們執行引導程序,他們會得到與您所詢問的錯誤非常相似的錯誤。

一種可能的解決方案是編寫程式碼來檢查它是否已安裝。它可以檢查系統資料庫或“程序文件”文件夾;無論您需要做什麼來確保它已安裝。然後優雅地退出並通知使用者如果他們沒有它。只要您在嘗試載入和使用 Crystal 程序集之前進行檢查,這將起作用。

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

引用自:https://stackoverflow.com/questions/971651