- 浏览: 571616 次
- 性别:
- 来自: 济南
-
文章分类
最新评论
-
mr_xiaoyu:
最终会调用到ScheduledFutureTask#run() ...
ScheduledThreadPoolExecutor -
csmnjk:
谢谢分享!
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎 -
qsword555:
public static void main(String ...
ScheduledThreadPoolExecutor -
yun900800:
我的也是就抛了一次异常
ScheduledThreadPoolExecutor -
bjfuzh:
bjfuzh 写道我自己跑了下,那个抛异常的定时器,只执行了一 ...
ScheduledThreadPoolExecutor
那就首先说点Runtime类吧,他是一个与JVM运行时环境有关的类,这个类是Singleton的。我说几个自己觉得重要的地方。
1、Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法。
2、Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法。
3、 Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调用 Runtime.exit()来退出JVM的,这里说明一下Java对Runtime返回值的一般规则(后边也提到了),0代表正常退出,非0代表异常中 止,这只是Java的规则,在各个操作系统中总会发生一些小的混淆。
4、Runtime.addShutdownHook()方法可以注册一个hook在JVM执行shutdown的过程中,方法的参数只要是一个初始化过但是没有执行的Thread实例就可以。(注意,Java中的Thread都是执行过了就不值钱的哦)
5、 说到addShutdownHook这个方法就要说一下JVM运行环境是在什么情况下shutdown或者abort的。文档上是这样写的,当最后一个非 精灵进程退出或者收到了一个用户中断信号、用户登出、系统shutdown、Runtime的exit方法被调用时JVM会启动shutdown的过程, 在这个过程开始后,他会并行启动所有登记的shutdown hook(注意是并行启动,这就需要线程安全和防止死锁)。当shutdown过程启动后,只有通过调用halt方法才能中止shutdown的过程并退 出JVM。
那什么时候JVM会abort退出那?首先说明一下,abort退出时JVM就是 停止运行但并不一定进行shutdown。这只有JVM在遇到SIGKILL信号或者windows中止进程的信号、本地方法发生类似于访问非法地址一类 的内部错误时会出现。这种情况下并不能保证shutdown hook是否被执行。
现在开始看这篇文章,呵呵。
首
先讲的是Runtime.exec()方法的所有重载。这里要注意的有一点,就是public Process exec(String []
cmdArray, String []
envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp我个人感
觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。
<!--[if !supportLists]-->1、 <!--[endif]-->一个很糟糕的调用程序,代码如下,这个程序用exec调用了一个外部命令之后马上使用exitValue就对其返回值进行检查,让我们看看会出现什么问题。
import java.util.*;
import java.io.*;
public class BadExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
int exitVal = proc.exitValue();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
A run of BadExecJavac produces:
E:classescomjavaworldjpitfallsarticle2>java BadExecJavac
java.lang.IllegalThreadStateException: process has not exited
at java.lang.Win32Process.exitValue(Native Method)
at BadExecJavac.main(BadExecJavac.java:13)
这
里看原文就可以了解,这里主要的问题就是错误的调用了exitValue来取得外部命令的返回值(呵呵,这个错误我也曾经犯过),因为exitValue
这个方法是不阻塞的,程序在调用这个方法时外部命令并没有返回所以造成了异常的出现,这里是由另外的方法来等待外部命令执行完毕的,就是waitFor方
法,这个方法会一直阻塞直到外部命令执行结束,然后返回外部命令执行的结果,作者在这里一顿批评设计者的思路有问题,呵呵,反正我是无所谓阿,能用就可以
拉。但是作者在这里有一个说明,就是exitValue也是有好多用途的。因为当你在一个Process上调用waitFor方法时,当前线程是阻塞的,
如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。所以在我们不能判断外部命令什么时候执行完毕而我们的程序还需
要继续执行的情况下,我们就应该循环的使用exitValue来取得外部命令的返回状态,并在外部命令返回时作出相应的处理。
2、对exitValue处改进了的程序
import java.util.*;
import java.io.*;
public class BadExecJavac2
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
不幸的是,这个程序也无法执行完成,它没有输出但却一直悬在那里,这是为什么那?
JDK文档中对此有如此的解释:因为本地的系统对标准输入和输出所提供的缓冲池有效,所以错误的对标准输出快速的写入和从标准输入快速的读入都有可能造成子进程的锁,甚至死锁。
文
档引述完了,作者又开始批评了,他说JDK仅仅说明为什么问题会发生,却并没有说明这个问题怎么解决,这的确是个问题哈。紧接着作者说出自己的做法,就是
在执行完外部命令后我们要控制好Process的所有输入和输出(视情况而定),在这个例子里边因为调用的是Javac,而他在没有参数的情况下会将提示
信息输出到标准出错,所以在下面的程序中我们要对此进行处理。
import java.util.*;
import java.io.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
程序的运行结果为
E:classescomjavaworldjpitfallsarticle2>java MediocreExecJavac
<ERROR>
Usage: javac <options> <source files>
where <options> includes:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-O Optimize; may hinder debugging or enlarge class files
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath <path> Specify where to find user class files
-sourcepath <path> Specify where to find input source files
-bootclasspath <path> Override location of bootstrap class files
-extdirs <dirs> Override location of installed extensions
-d <directory> Specify where to place generated class files
-encoding <encoding> Specify character encoding used by source files
-target <release> Generate class files for specific VM version
</ERROR>
Process exitValue: 2
哎,不管怎么说还是出来了结果,作者作了一下总结,就是说,为了处理好外部命令大量输出的情况,你要确保你的程序处理好外部命令所需要的输入或者输出。
下一个题目,当我们调用一个我们认为是可执行程序的时候容易发生的错误(今天晚上我刚刚犯这个错误,没事做这个练习时候发生的)
import java.util.*;
import java.io.*;
public class BadExecWinDir
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("dir");
InputStream stdin = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdin);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</OUTPUT>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
A run of BadExecWinDir produces:
E:classescomjavaworldjpitfallsarticle2>java BadExecWinDir
java.io.IOException: CreateProcess: dir error=2
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Unknown Source)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at BadExecWinDir.main(BadExecWinDir.java:12)
说实在的,这个错误还真是让我摸不着头脑,我觉得在windows中返回2应该是没有找到这个文件的缘故,可能windows 2000中只有cmd命令,dir命令不是当前环境变量能够解释的吧。我也不知道了,慢慢往下看吧。
嘿, 果然和作者想的一样,就是因为dir命令是由windows中的解释器解释的,直接执行dir时无法找到dir.exe这个命令,所以会出现文件未找到这 个2的错误。如果我们要执行这样的命令,就要先根据操作系统的不同执行不同的解释程序command.com 或者cmd.exe。
作者对上边的程序进行了修改
import java.util.*;
import java.io.*;
class StreamGobbler extends Thread
{
InputStream is;
String type;
StreamGobbler(InputStream is, String type)
{
this.is = is;
this.type = type;
}
public void run()
{
try
{
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
System.out.println(type + ">" + line);
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
public class GoodWindowsExec
{
public static void main(String args[])
{
if (args.length < 1)
{
System.out.println("USAGE: java GoodWindowsExec <cmd>");
System.exit(1);
}
try
{
String osName = System.getProperty("os.name" );
String[] cmd = new String[3];
if( osName.equals( "Windows NT" ) )
{
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
else if( osName.equals( "Windows 95" ) )
{
cmd[0] = "command.com" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd[0] + " " + cmd[1]
+ " " + cmd[2]);
Process proc = rt.exec(cmd);
// any error message?
StreamGobbler errorGobbler = new
StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new
StreamGobbler(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
Running GoodWindowsExec with the dir command generates:
E:classescomjavaworldjpitfallsarticle2>java GoodWindowsExec "dir *.java"
Execing cmd.exe /C dir *.java
OUTPUT> Volume in drive E has no label.
OUTPUT> Volume Serial Number is 5C5F-0CC9
OUTPUT>
OUTPUT> Directory of E:classescomjavaworldjpitfallsarticle2
OUTPUT>
OUTPUT>10/23/00 09:01p 805 BadExecBrowser.java
OUTPUT>10/22/00 09:35a 770 BadExecBrowser1.java
OUTPUT>10/24/00 08:45p 488 BadExecJavac.java
OUTPUT>10/24/00 08:46p 519 BadExecJavac2.java
OUTPUT>10/24/00 09:13p 930 BadExecWinDir.java
OUTPUT>10/22/00 09:21a 2,282 BadURLPost.java
OUTPUT>10/22/00 09:20a 2,273 BadURLPost1.java
... (some output omitted for brevity)
OUTPUT>10/12/00 09:29p 151 SuperFrame.java
OUTPUT>10/24/00 09:23p 1,814 TestExec.java
OUTPUT>10/09/00 05:47p 23,543 TestStringReplace.java
OUTPUT>10/12/00 08:55p 228 TopLevel.java
OUTPUT> 22 File(s) 46,661 bytes
OUTPUT> 19,678,420,992 bytes free
ExitValue: 0
这 里作者教了一个windows中很有用的方法,呵呵,至少我是不知道的,就是cmd.exe /C +一个windows中注册了后缀的文档名,windows会自动地调用相关的程序来打开这个文档,我试了一下,的确很好用,但是好像文件路径中有空格的 话就有点问题,我加上引号也无法解决。
这里作者强调了一下,不要假设你执行的程序是可执行的程序,要清楚自己的程序是单独可执行的还是被解释的,本章的结束作者会介绍一个命令行工具来帮助我们分析。
这里还有一点,就是得到process的输出的方式是getInputStream,这是因为我们要从Java 程序的角度来看,外部程序的输出对于Java来说就是输入,反之亦然。
最
后的一个漏洞的地方就是错误的认为exec方法会接受所有你在命令行或者Shell中输入并接受的字符串。这些错误主要出现在命令作为参数的情况下,程序
员错误的将所有命令行中可以输入的参数命令加入到exec中(这段翻译的不好,凑合看吧)。下面的例子中就是一个程序员想重定向一个命令的输出。
import java.util.*;
import java.io.*;
// StreamGobbler omitted for brevity
public class BadWinRedirect
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java jecho 'Hello World' > test.txt");
// any error message?
StreamGobbler errorGobbler = new
StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new
StreamGobbler(proc.getInputStream(), "OUTPUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
Running BadWinRedirect produces:
E:classescomjavaworldjpitfallsarticle2>java BadWinRedirect
OUTPUT>'Hello World' > test.txt
ExitValue: 0
程 序员的本意是将Hello World这个输入重订向到一个文本文件中,但是这个文件并没有生成,jecho仅仅是将命令行中的参数输出到标准输出中,用户觉得可以像dos中重定向 一样将输出重定向到一个文件中,但这并不能实现,用户错误的将exec认为是一个shell解释器,但它并不是,如果你想将一个程序的输出重定向到其他的 程序中,你必须用程序来实现他。可用java.io中的包。
import java.util.*;
import java.io.*;
class StreamGobbler extends Thread
{
InputStream is;
String type;
OutputStream os;
StreamGobbler(InputStream is, String type)
{
this(is, type, null);
}
StreamGobbler(InputStream is, String type, OutputStream redirect)
{
this.is = is;
this.type = type;
this.os = redirect;
}
public void run()
{
try
{
PrintWriter pw = null;
if (os != null)
pw = new PrintWriter(os);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
{
if (pw != null)
pw.println(line);
System.out.println(type + ">" + line);
}
if (pw != null)
pw.flush();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
public class GoodWinRedirect
{
public static void main(String args[])
{
if (args.length < 1)
{
System.out.println("USAGE java GoodWinRedirect <outputfile>");
System.exit(1);
}
try
{
FileOutputStream fos = new FileOutputStream(args[0]);
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java jecho 'Hello World'");
// any error message?
StreamGobbler errorGobbler = new
StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new
StreamGobbler(proc.getInputStream(), "OUTPUT", fos);
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
fos.flush();
fos.close();
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
Running GoodWinRedirect produces:
E:classescomjavaworldjpitfallsarticle2>java GoodWinRedirect test.txt
OUTPUT>'Hello World'
ExitValue: 0
这里就不多说了,看看就明白,紧接着作者给出了一个监测命令的小程序
import java.util.*;
import java.io.*;
// class StreamGobbler omitted for brevity
public class TestExec
{
public static void main(String args[])
{
if (args.length < 1)
{
System.out.println("USAGE: java TestExec "cmd"");
System.exit(1);
}
try
{
String cmd = args[0];
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
// any error message?
StreamGobbler errorGobbler = new
StreamGobbler(proc.getErrorStream(), "ERR");
// any output?
StreamGobbler outputGobbler = new
StreamGobbler(proc.getInputStream(), "OUT");
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
对这个程序进行运行:
E:classescomjavaworldjpitfallsarticle2>java TestExec "e:javadocsindex.html"
java.io.IOException: CreateProcess: e:javadocsindex.html error=193
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Unknown Source)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at TestExec.main(TestExec.java:45)
193在windows中是说这不是一个win32程序,这说明路径中找不到这个网页的关联程序,下面作者决定用一个绝对路径来试一下。
E:classescomjavaworldjpitfallsarticle2>java TestExec
"e:program filesnetscapeprogramnetscape.exe e:javadocsindex.html"
ExitValue: 0
好用了,这个我也试了一下,用的是IE。
最后,作者总结了几条规则,防止我们在进行Runtime.exec()调用时出现错误。
<!--[if !supportLists]-->1、 <!--[endif]-->在一个外部进程执行完之前你不能得到他的退出状态
<!--[if !supportLists]-->2、 <!--[endif]-->在你的外部程序开始执行的时候你必须马上控制输入、输出、出错这些流。
<!--[if !supportLists]-->3、 <!--[endif]-->你必须用Runtime.exec()去执行程序
<!--[if !supportLists]-->4、 <!--[endif]-->你不能象命令行一样使用Runtime.exec()。
发表评论
-
secure假死
2011-05-08 20:13 792secure假死 ctrl+q回复 -
jquery.prototype.data
2010-11-25 21:32 891jquery运行的闭包中生成变量expando = 'jQue ... -
closet 和 parents 区别
2010-10-28 18:29 838closest和parents的主要区别是: 1,前者从当前 ... -
jquery学习
2010-04-10 11:10 879怎样快速获得一个对象是jquery对象 if(a.jq ... -
MyEclipse中安装jquery插件
2010-02-27 13:29 4936从remote site中安装插件http://www.spk ... -
javascript小练习
2010-01-09 16:11 873<html> <head> ... -
mozilla中span设置宽度width , 画日历时发现
2010-01-01 18:48 2118span的默认display属性是inline,这样导致了在f ... -
模拟黑客帝国里面的文字下落
2010-01-01 10:14 1157<html> <head> < ... -
获得浏览器大小
2009-12-30 15:25 959function getBrowserWindowSize() ... -
ie a支持click火狐不支持 accessKey同样 , document.all可以判读firefox
2009-12-30 05:15 1818if(document.all) { ale ... -
document.getElementsByTagName特殊之处
2009-12-30 04:25 1178IE中有一个特殊点就是:IE中div和table等元素没有na ... -
javascript数组复习
2009-12-30 04:00 887<script> var a ... -
javascript apply
2009-12-27 00:20 816<script> fun ... -
javascript面向对象2
2009-12-25 01:19 822javascript中面向对象中分为公有 , 私有 , 特权 ... -
javascript 继承
2009-12-22 23:24 825var person = {}; person.getNam ... -
javascript 面向对象
2009-12-22 23:10 772function myClass(a , b) { ... -
javascript学习一
2009-12-22 00:11 8231.避包 (function(){ //这里是需 ... -
视频网站
2009-12-20 23:16 677http://down.zzbaike.com/ebook/i ... -
css javascript autocomplete
2009-12-20 17:57 1105<html> <head> ... -
javascript获取css属性
2009-12-20 17:28 1232//获得dom css的方法 fun ...
相关推荐
【Sentinel_LDK_Runtime_Cmd_Line】是Sentinel公司提供的一个软件保护和许可解决方案的重要组成部分,主要针对开发人员和系统管理员。这个工具集允许用户通过命令行界面管理Sentinel的硬件和软件锁,如USB Sentinel...
在Java编程语言中,`Runtime`类是每个Java应用程序都有的一个实例,它提供了与运行时环境交互的方法。当我们需要在Java程序中执行系统命令,比如运行一个批处理脚本(.bat文件)时,`Runtime`类或者其扩展类`...
标题中的"cmd_火山PC_cmd_CMD回显_"表明我们讨论的主题是关于在Windows操作系统中,使用命令行工具CMD(Command Prompt)与火山PC软件相结合,进行注册表的回显操作。火山PC是一款针对64位系统的软件,版本为...
根据提供的信息,我们可以深入探讨与CMD文件相关的几个关键知识点,包括CMD文件的基本概念、COFF格式的细节以及如何在CMD文件中定义内存区域和部分等内容。 ### CMD文件基础 CMD文件(Configuration Memory ...
在压缩包文件名"java_cmd"中,可能包含了实现这一功能的Java源代码文件,可能包括主程序类、GUI界面类以及与CMD交互的相关方法。这些代码会演示如何将用户在GUI中的操作转化为CMD命令,并监控命令的执行过程。学习和...
3. 读写管道:在某些情况下,我们可能需要与CMD窗口进行数据交互,如获取命令执行结果或发送输入命令。易语言提供了“创建管道”命令,可以创建一个管道对象,通过这个管道对象与CMD进程进行数据传输。 4. 错误处理...
4. **lock.reg**:注册表脚本,可能用于在Windows注册表中添加或修改与CMD加密相关的键值,以此实现CMD的启动保护。 5. **ulock.reg**:与lock.reg类似,这个文件可能用于删除或修改注册表项,从而取消CMD的密码...
在本案例中,CMD被用于创建游戏逻辑,实现玩家与游戏的交互。 【压缩包子文件的文件名称列表】中,有三个文件: 1. MTmap_50.cmd:这个文件可能包含了魔塔游戏的50层地图数据和相关的控制逻辑。CMD脚本可能包括读取...
本文将深入探讨如何使用VC++6.0通过`CreateProcess`执行CMD命令,并利用命名管道(Named Pipe)来获取命令执行后的返回信息。 首先,`CreateProcess`是Windows API中用于创建新进程和子进程的关键函数。它接受一...
在易语言中,有时我们需要调用操作系统的一些功能,例如与Windows命令行(CMD)交互,这时就需要使用到"控制台调用CMD命令"的技术。 控制台调用CMD命令主要涉及到进程管理和系统调用。在易语言中,我们可以使用内置...
标签“右键 CMD命令”进一步强调了这个功能与命令行工具CMD的关联。在日常开发工作中,开发者经常需要使用命令行来执行构建、部署、调试等任务,而“CMD Here”功能可以快速定位到所需的文件夹,避免了反复手动切换...
这种需求通常通过调用命令行(CMD)来实现。本文将详细探讨如何在Java和JavaScript中调用命令行操作。 **Java调用命令行** 在Java中,我们可以使用`Runtime`类或`ProcessBuilder`类来执行命令行操作。 1. **使用...
在Windows操作系统中,CMD(命令提示符)是一个用于运行DOS命令的文本界面工具。有时候,用户可能希望根据自己的需求调整CMD窗口的位置、大小、字体等属性。以下是一些关于如何设置CMD窗口位置和相关属性的知识点: ...
Sencha Cmd是一款强大的命令行工具,专为Sencha框架(如Sencha Touch和Ext JS)的开发和构建过程提供便利。在安装SenchaCmd6.6版本时,我们需要按照一定的步骤进行,确保其能顺利集成到开发环境中。下面将详细介绍...
开发者需要对CMD的输入输出机制有深入理解,同时还需要设计一套合理的命令集,使得玩家可以方便地与游戏交互。游戏的核心算法依然需要实现雷区的生成和逻辑判断,确保游戏的公平性和可玩性。 CMD版扫雷通常会包含...
CCS CMD 文件链接的两种方法 CCS CMD 文件链接是 CCS 7.0 工程中的一种重要的链接方式。在 CCS 7.0 工程中,我们可以使用两种方法来链接 CMD 文件:一种是 CMD 文件在工程外部,另一种是 CMD 文件在工程内部。 CMD...
WinForms提供了一个用户友好的界面,而通过C#执行CMD(命令提示符)命令,开发者可以调用系统级别的功能,执行批处理任务或者与操作系统进行更深度的交互。在VS2010(Visual Studio 2010)环境下,这个过程可以通过...
8. **安全性与权限控制**:工具可能具备安全特性,例如限制特定用户的访问权限,防止未经授权的修改或操作。 在实际应用中,"cmd多开管理工具"广泛适用于系统管理员、软件开发者、自动化测试工程师等人群,帮助他们...
《深入理解LayaAir2-CMD与Node.js的结合应用》 在数字媒体开发领域,LayaAir2-CMD是一个非常流行的2D和3D游戏引擎,它基于LayaAir框架,提供了命令行工具(CMD)来简化项目构建和部署流程。然而,在实际使用过程中...
12. **ping**:测试网络连接,检查与另一台主机的连通性。 13. **tracert/traceroute**:追踪数据包从源到目的地的路由。 14. **netstat**:显示网络连接、路由表和网络接口信息。 15. **nslookup**:查询DNS记录,...