有没有执行任何操作的Windows exe吗?


47

Windows安装过程中某处是否存在“ noop”式exe?我正在准备一些批处理作业和计划的任务,出于几个原因,我想引用一个不执行任何操作的可执行文件-即在没有可见窗口的情况下启动并立即退出。

在任何地方的常规Windows安装中都存在这样的可执行文件吗?或我怎么能接近?我不想依赖于Windows中尚未包含的任何内容。


2
从观察:svchost.exe没有打开任何东西。
— ta.speot。是2012年

@ todda.speot.is您应该将其作为完整答案。
— DuckMaestro '02

2
它必须是外部(可执行)文件吗?如果不是,则该rem命令可能已经起作用(并且取决于在批处理文件中使用它的位置,甚至可能是::变体)。
— Synetech

Answers:


51

您可以使用rundll32:

  • 没有控制台窗口
  • 没有副作用
  • 仅有44 KB
  • 无需参数
  • 适用于每个最新的Windows版本(XP,Vista,7),并且可能适用于每个基于NT的系统。

2
那为什么在那儿呢?
— 弥敦道

6
@Nathan使用适当的参数,它可以在DLL内调用函数
— Andrea

对。例如,想象一个简单的print.exe程序,简单地打印出它传递的参数。没有任何参数的话什么都不做,但是给它参数可以做一些事情:> print foobar。
— Synetech

@Andrea然后除非没有给出参数,否则它什么也不做。尽管按照他的要求,这已经足够了。
— barlop

3
除了它可能不是真正的无人值守。
— Andy Terra

36

Windows安装过程中某处是否存在“ noop”式exe?

具体来说,这是什么意思什么都不做的程序?是的,没有。否,因为Windows默认情况下不包括一个,但它确实包含可以自己制作的功能。


选项1

运行notepad.exe,键入以下行,并将其另存为C:\ret.scr(不要忘记空白行):

a
ret

rcx
1
n ret.com
w
q

使用以下命令在命令提示符(cmd.exe)上使用debug.exe对其进行编译:

C:\> debug < ret.scr

现在,您有了一个程序ret.com(在C:\中),该程序可以在批处理文件中使用,该程序绝对不执行任何操作(如果可以的话,除了退出以外)。

注意:debug在64位系统上不包括。


选项2

在Vista及更高版本中,默认情况下包括.NET框架,因此您也可以.exe使用C#(兼容64位)制作Windows本机内容:

运行notepad.exe并键入以下行,并将其另存为C:\ret.cs:

class rte
{
   static void Main() {
   }
}

使用以下命令在命令提示符(cmd.exe)上使用csc.exe进行编译:

C:\> csc ret.cs

现在,您有了另一个程序ret.exe(在C:\中),该程序可以在批处理文件中使用,该程序仅返回即可。


2
该死的辉煌..每个人都应该为此而投票..我一直想学习汇编语言..我从来没有使用过调试,并且以为它会在DOS下消失。很高兴我在这里偶然发现了您的答案。也许是将来的爱好饲料!
— barlop 2012年

12
对我来说,csc.exe并不是我走的路,而是位于C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe
— AlcubierreDrive,2012年

从仅具有主要方法(例如csc.exe)的C程序编译的EXE怎么办?这比您在debug中编写的程序做的还要多吗?例如,该程序还有更多的汇编语言吗?
— barlop

1
@barlop,通常是。虽然main看似一个空函数,或者至少应该只是一个空函数ret,但是如果您在反汇编程序(甚至是十六进制编辑器)中打开这样的程序,您会发现它远不止于此。它通常会设置各种段(代码,数据等),准备堆栈和堆,更不用说导入各种函数和字符串,即使从未真正使用过它们也是如此。
— Synetech

我需要用它来代替一些旧的外部支持软件来安装套件,以减小软件包的大小,而不再需要该软件,例如DirectX和VCruntimes。另外,如果您没有或想要安装任何编译器,请使用tutorialspoint.com/codingground.htm的在线编译器,编译后,下载项目,该文件将包含在存档中。
— JasonXA 2015年

10

Windows附带的任何程序(据我所知)都不会在执行时立即退出(至少是故意的)。

但是,在Windows Vista和更高版本中,有timeout.exe实用程序。Timeout.exe将等待指定的秒数,然后退出。例如:

C:\>timeout /t 0 > nul:

设置timeout.exe等待0秒与您将到达立即退出的EXE差不多。


3
要执行Op想要的操作,请使用“ timeout / t 0> nul:”之类的超时方法-它将运行timeout命令而没有任何输出,并且将立即退出。
— misterjaytee

@misterjaytee好主意。
— 安德鲁·兰伯特

@Tom:控制台窗口。除非您cmd.exe专门运行,否则它不会打开命令提示符。
— grawity 2012年

@grawity:任务计划程序需要命令处理器才能运行命令,因此控制台窗口将短暂显示。
— 塔玛拉·威斯曼

@TomWijsman我尽可能尝试一下,我无法打开任何新窗口。
— 安德鲁·兰伯特

4

如果没有参数“ C:\ Windows \ hh.exe”(Microsoft®HTML Help Executable),则不会执行任何操作,并且我猜想它包含在任何Windows版本中。


2

wscript 不带参数的脚本根本不运行任何脚本,并且是“ GUI”可执行文件(不会打开控制台)。


2
当我不带参数运行wscript时,会出现“ Windows脚本主机设置”。Windows 7 64位。跑步wscript /b似乎可以工作。
— DuckMaestro 2012年

2

我已经尝试过rndll32.exe,hh.exe但是两者都没有改变%ERRORLEVEL%。它是一个环境变量,指示最后一个可执行文件是否成功。像Unix返回代码一样工作。

我下面的noop命令会将%ERRORLEVEL%设置为零是:

cd %CD%

只需将工作目录更改为当前目录即可。


0

该命令echo off在批处理(.BAT)文件中不执行任何操作。尽管它不是可执行文件,但它是Windows内部命令。


7
实际上,它确实可以执行某些操作,但它会关闭回显功能。如果将其设置为关闭,那似乎没什么,但是如果您想回显,那么它肯定会做些什么。
— Synetech

6
和rem一样,它也不是Windows exe
— barlop

0

编译一个简单的“ Hello World” C ++程序以创建一个将立即退出的简单exe。
将以下代码保存在名称为a.cpp之类的文本文件中:

#include<iostream>
int main()
{ std::cout<<"Hello World";
return 0;
}

然后,使用最新的C ++编译器(如Windows 7的MinGW)对其​​进行编译。
对于MinGW,请在PowerShell或命令提示符中执行以下命令:(g++ path\a.cpp假设您已设置g ++二进制位置的环境PATH变量,或者您位于g ++二进制目录中,即c :\ mingw \ bin默认情况下)。执行命令后,您将获得一个.exe,它将显示Hello World并退出。双击验证... cmd窗口将出现并立即消失。命令行访问将显示Hello World,并使您返回CLI提示符。
然后,您可以在system32或Windows内部深处的任何位置移动此a.exe。您甚至可以在Windows的安装磁盘中推出它。


2
我非常确定Windows不包含C ++编译器。
— Synetech

6
打印“ Hello World”几乎无所作为。
— 基思·汤普森

只要CPU架构相同,就只需@Synetech编译一次。–
— Apple II,

1
@KeithThompson我不认为它会与BAT算法的干扰,但如果它真的事项,ASCII空字符替换的Hello World ..
— 苹果II

5
>我认为这不会影响BAT算法,但是如果确实很重要,请用ASCII空字符替换Hello World,或者完全删除打印命令。
— Synetech

0

您可以像这样用C编写无操作

void main() {

}

并将其编译为.exe文件。例如,如果安装了Visual Studio,则可以打开记事本,粘贴该代码段,将其另存为noop.c并在命令提示符下使用cl noop.c,它将noop.exe在同一文件夹中输出文件。

您可能不一定必须先浏览到该Microsoft Visual Studio X.0文件夹Program Files并vcvarsall.bat从命令提示符下运行。


您错过了部分问题,即“ Windows安装的一部分”。同样,分号是多余的。
— Synetech

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.