Applicazioni console C # tutte a 16 bit?
-
19-08-2019 - |
Domanda
Stavo leggendo su NTVDM.exe mentre creavo un'app console di test rapido e si è arrestato in modo anomalo su un computer di amici che si lamentava di questo EXE.
A quanto ho capito, tutte le finestre cmd DOS (incluse le app della console C #) funzionano come 16 bit non 32 bit.
È vero? Questo significa che tutte le app di back office delle app della mia console di lavoro funzionano a 16 bit anziché sfruttare al massimo i 32 bit disponibili?
E i servizi di Windows? Come credo l'abbiamo scritto come app per console e poi l'abbiamo eseguito come servizio Windows?
Grazie
Soluzione
Qualsiasi app .NET compilata per x86 sarà a 32 bit
Le app della console C # non sono in esecuzione in " real " dos: funzionano in un ambiente a 32 o 64 bit, a seconda del sistema operativo e del framework .NET.
Altri suggerimenti
A quanto ho capito, tutte le finestre cmd DOS (App per console C # incluse) eseguito come 16 bit non 32 bit.
È vero?
No, per niente.
È possibile eseguire applicazioni DOS su Windows, a 16 bit, ma il fatto che abbiano l'aspetto di una console è praticamente una coincidenza.
Non ci sono applicazioni .NET a 16 bit e se un'applicazione è in modalità console o meno non fa differenza se è 16 o 32 bit.
Le app MS-DOS vengono eseguite come app a 16 bit in ntvdm.
" Console di Windows " Le applicazioni non sono applicazioni DOS e vengono eseguite come processo Windows nativo (dove un po 'nell'intestazione PE del file EXE lo identifica come un'applicazione console, in modo che Windows possa creare / preparare una console Windows per l'applicazione se non è già presente esiste, ad es. eseguendo l'applicazione console da CMD o PowerShell riutilizzerai la finestra console già creata, mentre facendo doppio clic su EXE in Explorer creerà una nuova finestra console per l'applicazione.)
CMD! = DOS
Console di Windows! = DOS
Allo stesso modo, esiste un'API della console di Windows completa che è stata presente in Windows almeno da Windows 2000 (NT5) se non prima (sebbene probabilmente solo NT3 / 4.)
Un'app console .NET. (o qualsiasi altra app .NET) funzionerà come qualsiasi hardware di destinazione sia JIT. Quindi per x86 sarà a 32 bit.
A quanto ho capito, tutte le finestre cmd DOS (incluse le app della console C #) funzionano come 16 bit non 32 bit.
Ti sbagli. Tutte le finestre cmd.exe sono a 32 o 64 bit, a seconda dell'architettura.
DOS è morto insieme a Windows ME quasi un decennio fa.
Non conosco alcuna implementazione di VM VM che sia in grado di funzionare in modalità a 16 bit. Il runtime di Microsoft .NET e Mono sono solo 32/64 bit. Non conosco gli altri più piccoli, ma sarei sorpreso se potessero funzionare in modalità a 16 bit.
Inoltre, cmd.exe viene eseguito in modalità 32 bit poiché cmd.exe è un'applicazione Windows a 32 bit. D'altro canto, command.com viene eseguito in modalità a 16 bit.
In realtà, le applicazioni console sono lungi dall'essere intrinsecamente a 16 bit. Questo semplicemente non è vero, non era nemmeno vero prima di Windows, poiché la modalità protetta x86 è a 32 bit, quindi qualsiasi gioco o applicazione per DOS in esecuzione in modalità portected è a 32 bit.
In .NET, il tipo di interfaccia utente (o la mancanza dell'interfaccia utente come nei servizi Windows) non influisce sulla lunghezza delle parole dell'applicazione. Per impostazione predefinita, i binari .NET sono indipendenti dalla piattaforma e vengono eseguiti come applicazione a 32 o 64 bit a seconda del tipo di .NET Framework, kernel, ecc. Della macchina host. Sebbene possano essere compilati direttamente anche a 64 bit.
Non c'è niente di speciale in un exe console; è solo un file PE. Quindi, indipendentemente dalla console vs winform exe vs windows service, funzionerà in qualunque modalità sia stata compilata.
Visual Studio ecc. non genererà mai un exe a 16 bit. x86 vs x64 è più interessante ;-p
Probabilmente, il tuo amico non ha installato .NET framework (o ha solo 1.1).
Anche sotto DOS, " .EXE " potrebbe essere a 16 o 32 bit (con codifica appropriata o libreria di estensioni DOS).
NTVDM.EXE è l'emulatore DOS che supporta l'esecuzione di file .COM
e .EXE
a 16 bit in un ambiente in cui possono supporre che la CPU sia a 16 bit e che le chiamate di sistema DOS sono disponibili. La sua unica associazione con i prompt dei comandi è che i programmi DOS in modalità testo utilizzano la finestra Console per fornire l'emulazione di uno schermo VGA in modalità testo.
Come notato, non è disponibile alcuna VM .NET che può essere eseguita in DOS. Tuttavia, potrebbe essere divertente iniziare dalle fonti del progetto Mono e costruirne uno che gira sotto FreeDOS ... solo per spaventare i tuoi amici ;-)