Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Read给出了COMException“;“灾难性故障”;_.net_Debugging_Com - Fatal编程技术网

.net Read给出了COMException“;“灾难性故障”;

.net Read给出了COMException“;“灾难性故障”;,.net,debugging,com,.net,Debugging,Com,我有一个实用程序类,其中包含一些与XML模式相关的方法。在没有任何代码更改或对环境进行任何已知更改的情况下,它突然开始系统性地失败 失败的方法是: public static XmlSchema GetSchema(string xsdFileName) { string path = MyConfiguration.XmlSchemaLocation; if (!path.EndsWith(@"\")) { path += @"\"; }

我有一个实用程序类,其中包含一些与XML模式相关的方法。在没有任何代码更改或对环境进行任何已知更改的情况下,它突然开始系统性地失败

失败的方法是:

public static XmlSchema GetSchema(string xsdFileName)
{
    string path = MyConfiguration.XmlSchemaLocation;
    if (!path.EndsWith(@"\"))
    {
        path += @"\";
    }

    path += xsdFileName;
    return XmlSchema.Read(File.OpenRead(path), null);
}
堆栈跟踪显示XmlSchema.Read在内部试图构造一个解析器对象,它的构造函数试图读取一些配置,这反过来导致一些策略证据被检查,然后它出现了一个带有错误代码的COMException,如果我理解正确,提供的信息仅限于意外错误

例外情况如下:

System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone& zone, StringHandleOnStack retUrl)
   at System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence()
   at System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType)
   at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType)
   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)
   at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)
   at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType)
   at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)
   at System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext()
   at System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext()
   at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName)
   at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath)
   at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
   at System.Configuration.ClientConfigurationHost.RequireCompleteInit(IInternalConfigRecord record)
   at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
   at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.Xml.Schema.Parser..ctor(SchemaType schemaType, XmlNameTable nameTable, SchemaNames schemaNames, ValidationEventHandler eventHandler)
   at System.Xml.Schema.XmlSchema.Read(XmlReader reader, ValidationEventHandler validationEventHandler)
   at MyProj.Common.XSDValidator.GetSchema(String xsdFileName)
   at ...
你知道如何进一步调查吗?是否有人知道是什么原因导致了这种情况的发生(例如,进程正在执行的身份的用户配置文件已损坏)

这是在生产环境中发生的,我真的不知道如何继续找出它的原因,或修复它

如果相关:代码托管在控制台应用程序中。请注意,代码在启动前不久已成功访问配置。(MyConfiguration类是另一个实用程序类,它基本上是一个薄层,封装了一组使用普通System.Configuration.ConfigurationManager类的appSettings键。)

Windows版本:

OS Name:                   Microsoft® Windows Server® 2008 Datacenter
OS Version:                6.0.6002 Service Pack 2 Build 6002
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Server
OS Build Type:             Multiprocessor Free

程序正在通过任务调度器执行。失败的实例在最低权限下运行


我认为带有合理描述的SecurityException会更有意义,但一旦将计划任务配置为作为更私密的进程运行,问题就消失了。

FYI:Path.Combine()可能会稍微清理一下代码这是一个环境问题,用于确定程序集存储位置的低级CLR调用失败。倾向于由过度渴望的反恶意软件或网络问题引起。SysInternals的工具是一种发现潜在问题的好方法,比如Process Monitor。您程序的.config文件是触发器,我们看不到它。@HansPassant它不能是配置文件的内容。该程序是从输入目录读取文件并通过Windows任务计划程序运行的批处理程序。有许多不同的输入文件夹以不同的计划处理,其中只有一个以这种方式系统性地失败。类似的不重复: