Dot-Net

如何找出導致通用“應用程序無法啟動的原因”。聯繫應用程序供應商。ClickOnce 錯誤?

  • March 13, 2019

我有一個使用 ClickOnce 發布的 .NET 應用程序。在大多數情況下,這個過程一切正常,但每隔一段時間,使用者會收到一個錯誤,拋出如下所示的消息,而不是打開程序:

無法啟動應用程序。聯繫應用程序供應商。

在此處輸入圖像描述

我在 MSDN 上的 ClickOnce 部署頁面中找到了對特定錯誤進行故障排除,其中指出(在附加錯誤部分中):

錯誤資訊

無法啟動應用程序。聯繫應用程序發布者。

無法啟動應用程序。請聯繫應用程序供應商尋求幫助。

描述

這些是應用程序無法啟動時出現的一般錯誤消息,找不到其他具體原因。這通常意味著應用程序以某種方式損壞,或者 ClickOnce 儲存已損壞。

雖然它與針對此問題顯示的錯誤消息不完全匹配,但我認為它足夠接近以適應上述錯誤類別。現在解決此問題的方法是簡單地刪除儲存在…中的所有 ClickOnce 使用者設置。

C:\Users\USERNAME\AppData\Local\Apps\2.0  

…所以問題是可以忍受的,但我的問題是:

我可以做些什麼來找出導致這些一般錯誤的原因,以便阻止它們發生?

2件事:

  1. 如果您點擊“詳細資訊…”按鈕,您將獲得一個日誌文件,通常會顯示錯誤是什麼(它可能是伺服器上的清單文件損壞等)。
  2. 如果您說刪除本地設置幫助,則可能是 user.config 文件已損壞。我們在我們的應用程序中遇到了這個問題 - 我無法找出原因(我的猜測是我寫Properties.Settings得太頻繁了,但我不確定)。無論如何,這是我的解決方法:
public static void Main()
{
   if (ApplicationDeployment.IsNetworkDeployed == true)
   {
       try
       {
            ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
       }
       catch (ConfigurationErrorsException ex)
       {
           string filename = ex.Filename;
           _logger.Error(ex, "Cannot open config file");

           if (File.Exists(filename) == true)
           {
               _logger.Error("Config file {0} content:\n{1}", filename, File.ReadAllText(filename));
               File.Delete(filename);
               _logger.Error("Config file deleted");
               Properties.Settings.Default.Upgrade();
               // Properties.Settings.Default.Reload();
               // you could optionally restart the app instead
           }
           else
           {
               _logger.Error("Config file {0} does not exist", filename);
           }
       }
   }
   // code continues...
}

基本上我嘗試讀取設置,如果有任何錯誤 - 記錄損壞文件的內容,刪除它並繼續。

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