曾经要维护多台windows server服务器,经常需要打补丁。
每次打补丁都非常麻烦,需要在服务器上一台台地安装一个一个的补丁,
无奈之下自己开发了一个补丁安装器,点击 安装补丁 即可批量安装指定文件夹的所有补丁,这样工作量终于低下来了。
程序很简单,就是点击 安装补丁 按钮后 利用多线程去调用本地命令安装补丁。
程序源码和打包后的软件见附件。
(时间有限,由于直接在另一个不相干的现有工程中写的代码,所以程序源码编码不规范)
以下内容转载。出处不明。
要在控制台程序里面调用dos命令可以使用system函数,如system("dir");会把当前目录下的文件列表显示出来。
但如果在可视化窗口界面调用这个命令则会出现一个小问题了
1 调用命令时会出现一个dos窗口一闪而过,影响视觉效果。
2 无法将命令的执行结果反馈给用户。
所以我们要用另外一个函数来解决这个问题:WinExec。(注1)
WinExec的作用是运行指定的程序,其中第一个参数是程序的路径及参数,第二个参数是定义了以怎样的形式启动程序的常数值(详细请见msdn)。
比如我们要获得当前目录下的文件列表,可以这样
WinExec("cmd.exe /c dir > result.txt", SW_HIDE);
执行这行代码后,将会在当前目录下生成一个result.txt的文件,文件的内容就是执行dir命令的输出(注2)。并且不会出现dos窗口(SW_HIDE代表隐藏窗口)
有时候我们需要同时执行数条语句,是不是要执行多次system调用呢?
答案是否定的,dos自身提供了执行多条命令的功能,符号&&代表同时执行多条命令。
如“cd C:\demo && dir”会首先将目录切换到 C:\demo文件夹,然后执行dir命令。
利用&&命令可以实现这样的功能:暂停等待用户按下任意键,接下来执行某个命令。
如:pause && dir 会在屏幕上显示“请按任意键继续”和,在用户按下任意键后会执行dir命令输出文件列表。
上面利用pause命令实现暂停,但有个副作用:如果用户不按下键盘,程序就会永远停在那里。所以我们可以换个命令以实现暂停某段时间后继续。pause命令是不接受参数的,我们要换另一个命令:ping。可以大家以前也用过ping,不过一般是用来探测网络信息的吧?这里用它来实现暂停某段时间:
“ping -w 3000 w > nul”暂停三秒后继续(注3)
注1:
UINT WinExec(
LPCSTR lpCmdLine,
UINT uCmdShow
);
Parameters
nCmdShow
Specifies how the CWnd is to be shown. It must be one of the following values:
SW_HIDE Hides this window and passes activation to another window.
SW_MINIMIZE Minimizes the window and activates the top-level window in the system's list.
SW_RESTORE Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.
SW_SHOW Activates the window and displays it in its current size and position.
SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window.
SW_SHOWMINIMIZED Activates the window and displays it as an icon.
SW_SHOWMINNOACTIVE Displays the window as an icon. The window that is currently active remains active.
SW_SHOWNA Displays the window in its current state. The window that is currently active remains active.
SW_SHOWNOACTIVATE Displays the window in its most recent size and position. The window that is currently active remains active.
SW_SHOWNORMAL Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position.
注2:
这里用到了DOS的重定向技术,大家可以百度搜索一下,这里只简单地介绍一下>的作用:
将屏幕显示的内容转到文件中输出
注3:
这里为了不显示ping命令的结果,使用了重定向技术,将输出转到空设备
nul是Dos中的一个设备文件名 表示空设备,其它设备还有
CON 控制台(键盘/显示器) AUX 第一串行通信口
PRN 第一并行通信口/打印机 COM1 第一串行通信口
LPT1 第一并行通信口/打印机 COM2 第一串行通信口
LPT2 第一并行通信口/打印机 NUL 空文件
分享到:
相关推荐
VC调用dos命令总结,VC调用dos命令总结!!!
vc编写的ip配置工具,调用dos命令netsh实现,还不完善,一起学习
visual c++通过管道获得DOS命令的返回结果 在你的程序中调用cmd命令
vc调用DOS CMD命令得到屏幕上的文字
VC下面执行DOS命令的例子,可以获取DOS命令执行的结果,可以把命令执行结果记录在日志文件中。
在VC下执行DOS命令并得到输出 system方法 WinExec方法 ShellExecute方法 可回显的调用方法
c++...这个有问题------有大大帮忙看下......
结合CreateProcess()与管道技术实现了【在VC中调用DOS命令,并将Dos中输出的结果保存到字符串strOutPut】
vc采用imcp协议实现的ping程序,在dos界面上运行命令,方式同ping一致
这个时候将打开Dos命令窗口,然后按正常写法输入上述语句,就能够注册成功了。 如果已成功注册但调用不了,可尝试反注册一下:regsvr32 /u C:\WINDOWS\system32\ZOLIXSC300.ocx(32位),regsvr32 /u C:\WINDOWS\...
last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月、日、时间和使用的虚拟控制台。 4.应用技巧 Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这...
0550 怎样在程序中执行DOS命令 359 0551 修改其他进程中窗口的标题 359 0552 如何设计换肤程序 360 0553 PE档案格式分析 364 0554 修改应用程序图标 365 0555 列举应用程序使用的dll文件 368 0556 调用...
0550 怎样在程序中执行DOS命令 359 0551 修改其他进程中窗口的标题 359 0552 如何设计换肤程序 360 0553 PE档案格式分析 364 0554 修改应用程序图标 365 0555 列举应用程序使用的dll文件 368 0556 调用...
ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的...
(一)Windows下C/C++开发工具中,VC6使用较为普遍,因此这里先讲下VC6.0环境中集成pclint的步骤. 首先, 当然要下载软件,正版软件要200多$呢,买不起!所以只好网上找免费的拉。从...
执行环境往往包括Windows系统自带的一些程序,包括Copy,XCopy等等Shell命令。也有系统中已经安装的程序,如Delphi、VC、SVN等等。而执行数据,则是指我们的输入了!由于我们要达到在执行中不存在界面交互,那么就...
执行环境往往包括Windows系统自带的一些程序,包括Copy,XCopy等等Shell命令。也有系统中已经安装的程序,如Delphi、VC、SVN等等。而执行数据,则是指我们的输入了!由于我们要达到在执行中不存在界面交互,那么就...