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

È stato utile?

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 ;-)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top