Vra

Ek was besig om op te lees oor NTVDM.exe terwyl ek 'n vinnige toetskonsole-toepassing bou en dit het neergestort op 'n vriendemasjien wat oor hierdie EXE kla.

Soos ek dit verstaan, loop alle DOS cmd-vensters (C#-konsole-toepassings ingesluit) as 16bis nie 32bis nie.

Is dit waar?Beteken dit dat al my werkskonsole-app-agterkantkantoor-toepassings as 16bis werk eerder as om die meeste van die 32bis beskikbaar te maak?

Wat van Windows-dienste?Soos ek glo, het ons dit as 'n konsole-toepassing geskryf en dit dan as 'n Windows-diens laat loop?

Dankie

Was dit nuttig?

Oplossing

Enige .NET-toepassing wat vir x86 saamgestel is, sal 32-bis wees

C#-konsoleprogramme loop nie in "regte" dos nie - hulle loop in 'n 32-bis of 64-bis omgewing - afhangend van jou bedryfstelsel en .NET-raamwerk.

Ander wenke

Soos ek dit verstaan, alles DOS CMD Windows (C# Console Apps ingesluit) loop as 16bit nie 32bit nie.

Is dit waar?

Nee glad nie.

Jy kan DOS-toepassings onder Windows laat loop, en hulle is 16-bis, maar die feit dat hulle 'n bietjie konsole-agtig lyk, is amper net toeval.

Daar is geen 16-bis .NET-toepassings nie, en of 'n toepassing konsolemodus is of nie, maak geen verskil of dit 16 of 32-bis is nie.

MS-DOS Apps loop as 16-bis toepassings onder die ntvdm.

"Windows-konsole"-toepassings is nie DOS-toepassings nie, en loop as 'n inheemse Windows-proses (waar 'n bietjie in die PE-kopskrif van die EXE-lêer dit as 'n konsoletoepassing identifiseer, sodat Windows 'n Windows-konsole vir die toepassing kan skep/voorberei as een bestaan ​​nie reeds nie, bv.om jou konsoletoepassing vanaf CMD of PowerShell te laat loop, sal die konsolevenster wat reeds geskep is, hergebruik, terwyl dubbelklik op die EXE in Explorer 'n nuwe konsolevenster vir die toepassing sal skep.)

CMD != DOS

Windows-konsole != DOS

Net so is daar 'n volledige Windows Console API wat sedert ten minste Windows 2000 (NT5) in Windows teenwoordig is indien nie vroeër nie (hoewel waarskynlik slegs NT3/4.)

'n .NET-konsole-toepassing.(of enige ander .NET-toepassing) sal werk soos watter teiken hardeware dit ook al is.So vir x86 sal dit 32 bit wees.

Soos ek dit verstaan, loop alle DOS cmd-vensters (C#-konsole-toepassings ingesluit) as 16bis nie 32bis nie.

Jy is verkeerd.Alle cmd.exe Windows is 32 of 64-bis, afhangende van die argitektuur.

DOS is byna 'n dekade gelede saam met Windows ME dood.

Ek weet nie van enige .NET VM-implementering wat in 16-bis-modus kan loop nie.Die Microsoft .NET runtime en Mono is albei slegs 32/64 bis.Ek weet nie van die ander kleineres nie, maar ek sal verbaas wees as hulle in 16-bis-modus kan werk.

Ook, cmd.exe loop in 32-bis-modus aangesien cmd.exe 'n 32-bis Windows-toepassing is.Aan die ander kant loop command.com in 16-bis-modus.

Eintlik is konsoletoepassings ver van inherent 16-bis.Dit is eenvoudig nie waar nie, dit was nie eens waar voor Windows nie, aangesien die x86-beskermde modus 32-bis is, so enige speletjie of toepassing vir DOS wat in geporteerde modus loop, is 32-bis.

In .NET beïnvloed jou tipe UI (of gebrek aan UI soos in Windows Services) nie die woordlengte van die toepassing nie.By verstek is .NET-binaries platformonafhanklik, en word uitgevoer as 32-bis of 64-bis toepassing, afhangende van die tipe .NET Framework, kern, ens.van die gasheermasjien.Alhoewel hulle ook direk na 64-bis saamgestel kan word.

Daar is niks besonders aan 'n konsole-ekse nie;dit is net 'n PE-lêer.Dus, ongeag die konsole vs winform exe vs windows diens, dit gaan net werk in watter modus dit ook al saamgestel is.

Visual Studio ens sal nooit 'n 16-bis exe genereer nie.x86 vs x64 is meer interessant ;-bl

Waarskynlik, jou vriend het nie die .NET-raamwerk geïnstalleer nie (of het net 1.1).

Selfs onder DOS kan ".EXE" 16-bis of 32-bis wees (met toepaslike kodering of DOS-uitbreiderbiblioteek).

NTVDM.EXE is die DOS-emulator wat 16-bis ondersteun .COM en .EXE lêers in 'n omgewing waar hulle kan aanvaar dat die SVE 16-bis is en dat DOS-stelseloproepe beskikbaar is.Die enigste assosiasie met opdragprompts is dat teksmodus DOS-programme die konsole-venster gebruik om die emulasie van 'n VGA-skerm in teksmodus te verskaf.

Soos opgemerk, is daar geen .NET VM beskikbaar wat onder DOS kan loop nie.Dit kan egter pret wees om van die Mono-projekbronne te begin en een te bou wat onder FreeDOS loop ...net om jou vriende bang te maak ;-)

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top