我有一个使用ClickOnce发布的.NET应用程序。在大多数情况下,一切都适用于此过程,但每隔一段时间,用户将收到一个错误,抛出下面显示的消息而不是打开程序:
应用程序无法启动。联系应用程序供应商。
我在MSDN上找到了Troubleshooting Specific Errors in ClickOnce Deployments页面(在附加错误部分中):
Error message
应用程序无法启动。联系应用程序发布者。
无法启动应用程序。联系应用程序供应商以获取帮助
Description
这些是无法启动应用程序时出现的一般错误消息,并且找不到其他特定原因。通常这意味着应用程序以某种方式损坏,或者ClickOnce存储已损坏。
虽然它不是针对此问题显示的错误消息的完全匹配,但我认为它足够接近上述类别的错误。现在解决此问题的方法是简单地删除存储在...中的所有ClickOnce用户设置。
C:\Users\USERNAME\AppData\Local\Apps\2.0
...所以问题是可以承受的,但我的问题是:
我该怎么做才能找出导致这些一般错误的原因,以便我可以阻止它们发生?
2件事:
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...
}
基本上我尝试读取设置,如果有任何错误 - 记录损坏文件的内容,删除它并继续。如果您的项目是64位,并且您尝试将其复制到\ windows \ system32,则会出现此错误。将.exe移动到\ windows \ syswow64可以解决问题。