2016-04-15 8 views
0

Мое приложение работает на Windows Embedded Standard 7 и запускается при загрузке ОС.Event Viewer, сообщающий, что мое приложение C# разбилось на «System.Environment.FailFast()»

Иногда при первой загрузке, я получаю Unknown Hard Error, и после проверки просмотра событий, я вижу сообщение о

The application requested process termination through System.Environment.FailFast(string message). 
Message: Unrecoverable system error. 

Излишне говорить, что я, конечно, не имеют никаких вызовов к этой функции. Я только вижу, что это происходит в Windows Embedded, и не видел, чтобы это воспроизводилось при стандартной установке Windows.

Я не уверен, как диагностировать это или что «исправить» было бы уместно, поскольку я действительно не знаю, почему это происходит.

Edit:

Весь журнал просмотра событий:

Application: WinForm.exe 
    Framework Version: v4.0.30319 
    Description: The application requested process termination through System.Environment.FailFast(string message). 
    Message: Unrecoverable system error. 
    Stack: 
     at System.Environment.FailFast(System.String) 
     at MS.Internal.Invariant.FailFast(System.String, System.String) 
     at System.IO.Packaging.Package.AddIfNoPrefixCollisionDetected(ValidatedPartUri,  
System.IO.Packaging.PackagePart) at System.IO.Packaging.Package.GetPartHelper(System.Uri) 
    at System.IO.Packaging.Package.GetPart(System.Uri) 
    at System.Windows.Application.GetResourceOrContentPart(System.Uri) 
    at System.Windows.Application.LoadComponent(System.Object, System.Uri) 
    at Pms.PmControl.InitializeComponent() 
    at Pms.PmControl..ctor(Boolean) 
    at Pms.PmAppControl.StartWpfThread() 
    at System.Threading.ThreadHelper.ThreadStart_Context(System.Object) 
    at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 
    at System.Threading.ThreadHelper.ThreadStart() 
+0

Похоже, вы можете получить файл дампа, если путь настроен [в реестре] (http://stackoverflow.com/questions/7808541/where-is-the-application-dump-created-by-environment- FailFast-расположен-на-г). Также просматривает ли средство просмотра событий стек? Было бы полезно увидеть трассировку стека. – Quantic

+0

В журнале событий есть трассировка стека, но, к сожалению, ничего не происходит из любого вызова, который я делаю. Вся трассировка стека - это внутренние вызовы .NET, которые в конечном итоге называют 'FailFast'. Однако я попытаюсь отредактировать в трассировке стека. – pay

+0

Я солгал, там есть несколько моих звонков. – pay

ответ

1

Если вы посмотрите на код с декомпилятором вы найдете

// System.IO.Packaging.Package 
private void AddIfNoPrefixCollisionDetected(PackUriHelper.ValidatedPartUri partUri, PackagePart part) 
{ 
    this._partList.Add(partUri, part); 
    int num = this._partList.IndexOfKey(partUri); 
    Invariant.Assert(num >= 0, "Given uri must be present in the dictionary");** 
    string normalizedPartUriString = partUri.NormalizedPartUriString; 
    string text = null; 
    string text2 = null; 
    if (num > 0) 
    { 
     text = this._partList.Keys[num - 1].NormalizedPartUriString; 
    } 
    if (num < this._partList.Count - 1) 
    { 
     text2 = this._partList.Keys[num + 1].NormalizedPartUriString; 
    } 
    if ((text != null && normalizedPartUriString.StartsWith(text, StringComparison.Ordinal) && normalizedPartUriString.Length > text.Length && normalizedPartUriString[text.Length] == PackUriHelper.ForwardSlashChar) || (text2 != null && text2.StartsWith(normalizedPartUriString, StringComparison.Ordinal) && text2.Length > normalizedPartUriString.Length && text2[normalizedPartUriString.Length] == PackUriHelper.ForwardSlashChar)) 
    { 
     this._partList.Remove(partUri); 
     throw new InvalidOperationException(SR.Get("PartNamePrefixExists")); 
    } 
} 

код не в утверждают, потому что это единственный метод, который вызывает FailFast

internal static void Assert(bool condition, string invariantMessage) 
{ 
    if (!condition) 
    { 
     Invariant.FailFast(invariantMessage, null); 
    } 
} 

Теперь остается вопрос, почему пакет не найден в массиве PartList. WPF заполняет некоторые вещи для вас. Может быть, вы ссылаетесь на свой ресурс XAML на какой-либо ресурс через интернет-адрес или сетевой ресурс, который может потерпеть неудачу, если сетевая подсистема вашей Windows-вставки еще не готова?

+0

Я думал что-то в этих строках на самом деле, возможно, если я добавлю 10-30 секунд задержки до загрузки программного обеспечения, это может дать ОС больше времени, чтобы быть «готовым». Спасибо за информацию, хотя, я посмотрю вокруг, если есть какой-то ресурс, который исправлен неправильно или что-то странное. Я также думал, что может быть служба, которая не запускается вовремя, чтобы мое программное обеспечение загружалось должным образом. – pay

Смежные вопросы