【问题标题】:How do I get the exit code via %errorlevel% , its not working anymore with assembly program如何通过 %errorlevel% 获取退出代码,它不再适用于汇编程序
【发布时间】:2012-03-13 20:46:36
【问题描述】:

我想获取我的教程汇编程序的退出代码(使用 masm32 和链接)。它工作正常,我会输入 echo %errorlevel%,它会显示我在 invoke ExitProcess 之后输入的退出代码。现在它不再起作用了。我在 OpenSuse 12.1 主机和 Windows Vista Home Premium 上使用 VirtualBox 作为来宾。我一直在寻找答案,但没有找到答案。大多数抱怨都是关于使用批处理文件,这不是我想要做的。这是一个简单的程序

hello_world.asm

.586
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

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

end start

我希望它返回 2,但 echo %errorlevel% 返回 0。我缺少什么吗?谢谢,我很抱歉这个问题已经回答死了。我就是找不到答案。

编辑:实际上,我找到了部分答案。只有当我使用/SUBSYSTEM:CONSOLE 链接时它才有效。使用/SUBSYSTEM:WINDOWS 总是返回0。我不知道该怎么做。 windows程序的退出代码在哪里?非常感谢任何信息。

【问题讨论】:

    标签: windows assembly masm masm32 errorlevel


    【解决方案1】:

    如果您的子系统是 Windows,则命令处理器会立即返回命令提示符,而无需等待程序退出。 (以notepad 为例。)由于尚未发明时间旅行,它无法告诉您程序的退出代码是什么,因为程序还没有退出。

    【讨论】:

      【解决方案2】:

      像这样启动这个过程:

      start /wait helloworld
      

      这将使命令 shell 等待进程完成,以便它可以检索退出代码。

      (如果您使用的是批处理文件,则不需要这样做。)

      【讨论】:

        猜你喜欢
        • 2012-03-23
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2020-01-13
        • 1970-01-01
        相关资源
        最近更新 更多