有没有执行任何操作的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.exehh.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 Filesvcvarsall.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.