windows - Hvordan får jeg exitkode via\% errorlevel\%, det virker ikke længere med montageprogram

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ønsker at få udgangskoden til min vejledning samlingsprogram (ved hjælp af masm32 og link). Det fungerede fint, jeg ville skrive ekko \%errorlevel\% og det ville vise min exit kode, som jeg skrev ind efter invoke ExitProcess. Nu arbejder det ikke længere. Jeg bruger VirtualBox på en OpenSuse 12.1 vært og Windows Vista Home Premium som gæst. Jeg har søgt efter svar, men er kommet kort. De fleste klager handler om at bruge en batch-fil, hvilket ikke er det jeg forsøger at gøre. Her er det enkle program


hello\_world.asm


.586
.model flat, stdcall
option casemap :none

include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includeuser32.inc

includelib masm32libkernel32.lib
includelib masm32libuser32.lib

.data
HelloWorld  db  "Hello World!", 0
.code
start:
invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB\_OK
invoke ExitProcess, 2

end start


Jeg forventer, at det vender tilbage 2, men echo \%errorlevel\% returnerer 0. Er der noget jeg mangler? Tak, og jeg undskylder, at dette spørgsmål er blevet besvaret til døden. Jeg kan bare ikke finde mit svar.


Rediger : Faktisk fandt jeg en del af mit svar. Det virker kun, hvis jeg linker ved hjælp af /SUBSYSTEM:CONSOLE. Ved hjælp af /SUBSYSTEM:WINDOWS returnerer jeg altid 0. Jeg ved ikke hvad jeg skal gøre af dette. Hvor er exitkode med et Windows-program? Enhver info værdsat meget.

Bedste reference


Hvis dit delsystem er Windows, vender kommandoprocessoren straks tilbage til kommandoprompten uden at vente på, at programmet skal afslutte. (Prøv det med notepad.) Da rejsetid endnu ikke er opfundet, kan det ikke fortælle dig, hvad programmets exitkode er, da programmet endnu ikke er afsluttet.

Andre referencer 1


Start processen sådan:


start /wait helloworld


Det vil gøre kommandoen skal vente, indtil processen er færdig, så den kan hente exitkode.


(Du behøver ikke at gøre dette, hvis du bruger en batch-fil.)