WinForms/C# .NET工具无法启动,XML配置解析异常如何排查?
WinForms/C# .NET工具启动失败:XML配置解析异常排查与解决
问题背景
- 多年前开发的WinForms/C# .NET工具,依赖旧版.NET Framework,此前所有电脑均可正常启动,软件及系统近期无改动
- 某次要电脑通过远程桌面使用时,
explorer.exe崩溃重启后,工具无法启动:双击图标仅短暂显示加载状态,无任何反应,其他电脑运行正常
已尝试操作
- 卸载并重新安装应用
- 关闭Nod32杀毒软件(无关联拦截提示)
- 重启电脑
事件查看器关键报错日志
Application: [MyApplication].exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.Xml.XmlException at System.Xml.XmlTextReaderImpl.Throw(System.Exception) at System.Xml.XmlTextReaderImpl.ParseText(Int32 ByRef, Int32 ByRef, Int32 ByRef) at System.Xml.XmlTextReaderImpl.ParseText() at System.Xml.XmlTextReaderImpl.ParseElementContent() at System.Configuration.XmlUtil.StrictReadToNextElement(System.Configuration.ExceptionAction) at System.Configuration.BaseConfigurationRecord.ScanSectionsRecursive(System.Configuration.XmlUtil, System.String, Boolean, System.String, System.Configuration.OverrideModeSetting, Boolean) at System.Configuration.BaseConfigurationRecord.ScanSectionsRecursive(System.Configuration.XmlUtil, System.String, Boolean, System.String, System.Configuration.OverrideModeSetting, Boolean) at System.Configuration.BaseConfigurationRecord.ScanSections(System.Configuration.XmlUtil) at System.Configuration.BaseConfigurationRecord.InitConfigFromFile() Exception Info: System.Configuration.ConfigurationErrorsException at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean) at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) at System.Configuration.ClientConfigurationSystem.OnConfigRemoved(System.Object, System.Configuration.Internal.InternalConfigEventArgs) Exception Info: System.Configuration.ConfigurationErrorsException at System.Configuration.ClientConfigurationSystem.OnConfigRemoved(System.Object, System.Configuration.Internal.InternalConfigEventArgs) at System.Configuration.Internal.InternalConfigRoot.OnConfigRemoved(System.Configuration.Internal.InternalConfigEventArgs) at System.Configuration.Internal.InternalConfigRoot.RemoveConfigImpl(System.String, System.Configuration.BaseConfigurationRecord) at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(System.String, Boolean, Boolean, Boolean, Boolean, System.Object ByRef, System.Object ByRef) at System.Configuration.BaseConfigurationRecord.GetSection(System.String) at System.Configuration.ConfigurationManager.GetSection(System.String) at System.Configuration.ClientSettingsStore.ReadSettings(System.String, Boolean) at System.Configuration.LocalFileSettingsProvider.GetPropertyValues(System.Configuration.SettingsContext, System.Configuration.SettingsPropertyCollection) at System.Configuration.SettingsBase.GetPropertiesFromProvider(System.Configuration.SettingsProvider) at System.Configuration.SettingsBase.GetPropertyValueByName(System.String) at System.Configuration.SettingsBase.get_Item(System.String) at System.Configuration.ApplicationSettingsBase.GetPropertyValue(System.String) at System.Configuration.ApplicationSettingsBase.get_Item(System.String) at [MyApplication].UI.WinForms.Properties.Settings.get_UnrarExePath() at [MyApplication].Archive_tester_main_Form..ctor() at [MyApplication].Program.Main()
正常运行该工具的电脑无此类日志
怀疑方向
问题源于系统存储的XML配置文件损坏(非应用文件夹下的.config文件)
排查与解决步骤
1. 定位用户配置文件路径
C# ApplicationSettings默认存储在用户目录的隐藏文件夹中,路径通常为:
C:\Users\[当前用户名]\AppData\Local\[你的公司/作者名称]\[应用程序名称]\[版本号]- 或
C:\Users\[当前用户名]\AppData\Roaming\[你的公司/作者名称]\[应用程序名称]\[版本号]
该路径下的user.config即为报错的配置文件。
2. 修复或删除损坏的配置文件
- 打开
user.config文件,检查是否存在XML格式错误(如标签未闭合、非法特殊字符、编码问题),手动修复后保存 - 若无法修复,直接删除
user.config文件,工具启动时会自动生成默认配置文件
3. 验证并修复.NET Framework环境
- 运行命令提示符(管理员权限),执行
sfc /scannow扫描并修复系统文件,排查.NET Framework组件损坏问题 - 若问题依旧,重新安装对应版本的.NET Framework v4.0.30319
4. 检查系统权限
- 右键工具图标,选择以管理员身份运行测试是否能正常启动
- 检查工具安装目录及配置文件存储路径的权限,确保当前用户拥有完全控制权限
5. 进一步诊断(可选)
- 若有Visual Studio环境,将工具附加到调试器,启动时捕获更详细的异常堆栈信息
- 使用Process Monitor跟踪工具启动时的文件/注册表访问记录,精准定位报错的配置文件
内容的提问来源于stack exchange,提问作者TTT
相关产品推荐
相关产品推荐

