C # программа вызывает синий экран? - PullRequest
7 голосов
/ 02 ноября 2011

Это только важные вещи, которые показывает синий экран. Я на Windows 7 x64.

"Обнаружена проблема, и Windows была закрыта для предотвращения повреждения на ваш компьютер.

PROCESS_HAS_LOCKED_PAGES

* STOP: 0x00000076 (0x0000000000000000, 0xfffffa8009dcd060, 0x0000000000000011, 0x0000000000000000)"

Я не могу сейчас над этим работать, потому что каждый раз, когда я закрываю его, я получаю синий экран! Программа пока ничего не делает, кроме запуска фонового работника ниже. Он проверяет все адреса, которые могут быть частью домашней сети пользователя, и пытается подключиться к определенному порту, который будет прослушивать другая программа.

private void NetworkScanner_DoWork(object sender, DoWorkEventArgs e)
    {
        bool ExceptionEncountered = false;
        int IPsProcessed = 0;

        NetworkSearcherOutput = "Starting network scanner...";
        NetworkSearcher.ReportProgress(0);
        Thread.Sleep(1000);

        foreach (IPAddress IP in Dns.GetHostAddresses(Dns.GetHostName()))
        {
            if (IP.AddressFamily == AddressFamily.InterNetwork)
            {
                string[] Octets = IP.ToString().Split('.');
                Octets[3] = "0";

                IPAddress CurrentAddressIteration = StringArrayToIP(Octets);
                while (GetLastOctet(CurrentAddressIteration) != 255)
                {
                    PingReply Reply = new Ping().Send(CurrentAddressIteration, 5);

                    if (Reply.Status == IPStatus.Success)
                    {
                        NetworkSearcherOutput = CurrentAddressIteration.ToString() + " sent response.";
                        NetworkSearcher.ReportProgress(0);
                        Thread.Sleep(500);

                        InClient Client = new InClient(CurrentAddressIteration);

                        try
                        {
                            Client.Connect();

                            SnapshotBox.Image = Client.Receive(typeof(Image));

                            NetworkSearcherOutput = CurrentAddressIteration.ToString() + " is running program.";
                            NetworkSearcher.ReportProgress(0);
                            Thread.Sleep(1000);
                        }

                        catch (Exception E)
                        {
                            // A socket exception is expected when the client is not running the program.
                            if (E is SocketException)
                            {
                                Client.Close();

                                NetworkSearcherOutput = CurrentAddressIteration.ToString() + " is not running program.";
                                NetworkSearcher.ReportProgress(0);
                                Thread.Sleep(1000);
                            }

                            //Unhandled exception. Show messagebox and close.
                            else
                            {
                                MessageBox.Show("Network scanner encountered an unhandled exception.\n\n" + E.GetType().ToString() + ": " + E.Message, "Unhandled Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                ExceptionEncountered = true;
                                break;
                            }
                        }
                    }

                    else
                    {
                        NetworkSearcherOutput = CurrentAddressIteration.ToString() + " did not respond.";
                        NetworkSearcher.ReportProgress(0);
                    }

                    IPsProcessed++;

                    if (IPsProcessed == 5)
                    {
                        NetworkSearcher.ReportProgress(2);
                        IPsProcessed = 0;
                    }

                    Octets = CurrentAddressIteration.ToString().Split('.');
                    Octets[3] = (Int32.Parse(Octets[3]) + 1).ToString();
                    CurrentAddressIteration = StringArrayToIP(Octets);
                }
            }
        }

        if (!ExceptionEncountered)
        {
            NetworkSearcherOutput = "Network scanning complete.";
            NetworkSearcher.ReportProgress(0);
            NetworkSearcher.ReportProgress(100);
        }

        else
        {
            NetworkSearcherOutput = "Network scanning encountered an error.";
            NetworkSearcher.ReportProgress(-1);
        }

Я думал, что программы на C # никогда не должны вызывать голубые экраны?

Ответы [ 2 ]

7 голосов
/ 02 ноября 2011

Я обнаружил эту проблему несколько недель назад. Это происходит только при использовании .NET 4.

Сообщено в MS Connect .

Edit:

(Will *) Добавить эту ссылку в отчет об ошибке MS Connect.

* login.live.com снова входит в бесконечный цикл ...

4 голосов
/ 02 ноября 2011

Просто чтобы прояснить ситуацию, код пользовательского режима не может принудительно создать синий экран в окнах, если он не использует недокументированные API-интерфейсы и или не выдает неверные данные в драйвер. Ваш код C #, вероятно, здесь не виноват, так как если вы используете классы пользовательского режима (Socket), то сокет отвечает за то, что ваш компьютер не сломался.

Как прокомментировал @Joe В статье 256010 службы поддержки Microsoft KB четко описано это сообщение об остановке, но еще лучше есть четкие инструкции по захвату имени драйвера, ответственного за эту ошибку.

Обратите внимание, что любой программный брандмауэр, который вы установили, также задействован на уровне режима ядра, поэтому также может нести ответственность за эту ошибку. Я рекомендую вам следовать советам из статей КБ и попытаться выяснить, в чем причина. Но вы также можете убедиться, что вы обновили свои сетевые драйверы и программное обеспечение брандмауэра / VPN до последних стабильных версий.

...