如果我用汇编语言构建程序,如何强制它在后台运行(没有任何控制台)?该计划是无止境的,所以控制台一直出现..
是否有解决方案或某些让我这样做的中断? 谢谢大家。
编辑:我正在使用Tasm Compiler,&我的操作系统是Windows 7(32位)
答案 0 :(得分:3)
如果您不想拥有控制台窗口,则必须将程序与/SUBSYSTEM:WINDOWS
相关联
您可以参考MSDN了解各种选项。
但这并不是一个与汇编相关的问题,因为这同样适用于您创建的任何其他可执行文件。
答案 1 :(得分:2)
这方面的诀窍是您需要创建Windows应用程序而不是控制台应用程序。使用最小的示例应用程序可以最好地证明如何做到这一点。
我们首先设置内存模型。
.386
.model flat
然后我们包含windows.inc
,它允许我们访问API调用中可能需要的各种常量。如果您没有对Windows API做太多工作,那么您将不需要这个。
include windows.inc
接下来,我们为要调用的函数添加externs。至少你需要致电ExitProcess
。在这个例子中,我们也打算调用MessageBoxA
,这样我们就可以看到应用程序做了什么。
extrn ExitProcess : near
extrn MessageBoxA : near
接下来是一个带有消息框“Hello World”消息的数据段。
.data
hello db "Hello World!",0
最后是代码。它只需要调用MessageBoxA
来显示消息,然后调用ExitProcess
来退出应用程序。
.code
start:
push MB_ICONHAND or MB_OKCANCEL
push offset hello
push offset hello
push 0
call MessageBoxA
push 0
call ExitProcess
end start
假设您已将此代码保存在文件 wintest.asm 中,则可以使用以下命令行对其进行编译:
tasm32 /ml wintest.asm
/ml
选项指定您要使用区分大小写的符号。如果没有它,链接器将找不到Windows函数调用。
如果您收到有关无法找到 windows.inc 包含文件的错误,则可能还需要在{Borner include目录的路径中包含/i
选项。
最后,您使用以下命令行进行链接:
ilink32 wintest.obj,,,import32.lib,,
import32.lib
是一个导入库,可将您的代码链接到Windows API。
假设所有内容都已成功编译和链接,您现在应该有一个名为 wintest.exe 的Windows应用程序,该应用程序在运行时会弹出一个消息框,但不会打开控制台窗口。< / p>
答案 2 :(得分:1)
如果您使用的是Linux / Unix,请使用daemonize。