亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建 StreamWriter 實例會使應用程序崩潰并出現 RPC 錯誤

創建 StreamWriter 實例會使應用程序崩潰并出現 RPC 錯誤

C#
三國紛爭 2022-07-23 09:14:30
我偶然發現了非常奇怪的錯誤。FileStream在第一個應用程序中使用時,using會遍歷循環并打印出“Done”,但是,它是exits with the error code 5. Try/Catch也不行。這似乎是非常脆弱的錯誤狀態,因為如果我擺弄文件名(例如C:\TFS\file1.xml.No.xml-> C:\TFS\file1.xml.N.xml),那么它工作正常。如果我var tw = File.CreateText在第一次使用中使用,那么應用程序exits with the code 1073741845。對于可重現的示例,我已設法將問題顯著減少到以下幾行代碼。也許有人可以解釋為什么這會表現得如此奇怪?我也對為什么我無法從這個錯誤狀態中恢復感興趣?我試過了[HandleProcessCorruptedStateExceptions],[SecurityCritical]沒有效果。    static void Main(string[] args)    {        var ds = new DataSet();        for (int i = 0; i <= 2; i++)        {            using (var fs = new FileStream(@"C:\TFS\file1.xml.No.xml", FileMode.Create))            {            }            using (var tw = File.CreateText(@"C:\TFS\file1.xml"))            {                ds.WriteXml(tw);            }            Console.WriteLine($"Pass {i} done.");        }        Console.WriteLine("Done");        Console.ReadLine();    } 使用 .NET Framework 4.7 控制臺應用程序項目。編輯:如果我Thread.Sleep(2000)輸入每條using語句-然后在第二遍之后遇到此錯誤-它會在打印之前打印Pass 1 done.,因此寫入頻率似乎與此行為無關。Pass 2 done.has exited with code 5 (0x5)在進一步修改這個小樣本后 - 我可以DataSet在完全不使用并且只創建StreamWriter實例的情況下重現該問題。下面的例子應該在突然退出之前產生:TW1 created.TW1 flushed.TW1 created.TW2 flushed.Pass 0 done.    static void Main(string[] args)    {        for (int i = 0; i <= 2; i++)        {            var tw1 = File.CreateText(@"C:\TFS\file1.xml.No.xml");            Console.WriteLine("TW1 created.");            tw1.Flush();            Console.WriteLine("TW1 flushed.");            Thread.Sleep(2000);            var tw2 = File.CreateText(@"C:\TFS\file1.xml");            Console.WriteLine("TW1 created.");            tw2.Flush();            Console.WriteLine("TW2 flushed.");            Thread.Sleep(2000);            Console.WriteLine($"Pass {i} done.");        }        Console.WriteLine("Done");        Console.ReadLine();    }** EDIT2:** 所以在我們看來,這個問題是由Kaspersky Endpoint Security for Windows v11.
查看完整描述

1 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

進程退出代碼意義不大,您更喜歡看到調試器停止告訴您未處理的異常。但可以肯定的是,這不健康。這是一個反惡意軟件引發的問題,他們不喜歡XML 文件。通常是程序員機器上的一個問題,他們也不喜歡看似無處出現的可執行文件,這些可執行文件是由使用進程互操作的進程創建的,就像 IDE 運行 msbuild 一樣。強烈的惡意軟件信號。因此,您要做的第一件事就是暫時關閉它,看看是否能解決問題。

它肯定會,接下來你要做的就是切換到不那么激進的東西。操作系統提供的反惡意軟件解決方案永遠不會那樣做。如果您使用 Avast 或其他任何具有“深度掃描”模式的設備,請盡快卸載。

并且有點擔心您的用戶可能會使用什么,從 FileStream 獲取 IOException 是很正常的,因此非常需要 try/catch。通常,您不想覆蓋文件或刪除您在幾毫秒前創建的目錄,幸運的是,這樣做從來都不是明智之舉。


查看完整回答
反對 回復 2022-07-23
  • 1 回答
  • 0 關注
  • 240 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號