La console di Windows degrada: i programmi improvvisamente non sono in grado di gestire ctrl-c


0

Una volta ogni tanto i programmi della console che eseguo non sono in grado di gestire Ctrl-C . Gli esempi sono cygwin programmi, se li eseguo nella console anziché mintty e lo strumento audio della riga di comando sox.exe.

Di solito scrivo Win-R , cmd, accedere e quindi avviare un programma.

Normalmente, quando esegui un Cygwin bash shell in una console di Windows e premere ctrl-c, lo gestisce e ristampa il prompt, ma ora è terminato e mi viene richiesto Terminate batch job (Y/N)?

Normalmente, sox.exe stampa un messaggio "abortito" in risposta a ctrl-c, ma ora si blocca e lo standard sox.exe has stopped working Viene visualizzata la finestra della GUI.

Inoltre, se avvio alcuni programmi da a .bat file, ho anche un altro popup: windows command processor has stopped working

Dopo il riavvio, tutto funziona di nuovo. Logoff / login o Switch utente non funzionano.

Anche il seguente semplice programma si arresta in modo anomalo sulla mia macchina, ma lo stesso binario riesce su un altro:

#include "stdafx.h"

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <conio.h>

static BOOL WINAPI MyHandlerRoutine(
    _In_ DWORD dwCtrlType
) {
    switch (dwCtrlType) {
    case CTRL_C_EVENT:
        printf("ctrl-c pressed\n");
        return TRUE;
    case CTRL_BREAK_EVENT:
        printf("ctrl-break pressed\n");
        return TRUE;
    }
    return FALSE;
}

int main()
{
    int c;
    DWORD dw = 0;
    BOOL b;

    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);

    b = GetConsoleMode(hStdin, &dw);
    printf("GetConsoleMode() returned %d %u\n", (int)b, dw);

    dw = dw & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);

    dw = ENABLE_PROCESSED_INPUT;

    SetLastError(0);

    b = SetConsoleMode(hStdin, dw);
    printf("SetConsoleMode(%u) returned %d\n", dw, (int)b);

    if (!b) {
        printf("GetLastError() returned %u\n", GetLastError());
    }

    b = SetConsoleCtrlHandler(MyHandlerRoutine, TRUE);
    printf("SetConsoleCtrlHandler() returned %d\n", (int)b);

    printf("press ENTER to exit\n");
    for (;;) {
        char buf[1];
        c = getchar();
        printf("%02x ", c);
        // EOF == c || 
        if (10 == c || 13 == c) break;
    }
    return 0;
}

Come stai iniziando i tuoi programmi di console? Li stai lanciando da una scorciatoia, o da un file batch, o stai aprendo un prompt dei comandi per poi lanciare manualmente l'eseguibile?
Twisty Impersonator

Di solito digito Win-R, cmd, Invio e quindi avvio un programma.
basin

OK. per favore modificare la tua risposta alla tua domanda
Twisty Impersonator
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.