防止 wmic.exe 写入 TempWmicBatchFile.bat
Posted
技术标签:
【中文标题】防止 wmic.exe 写入 TempWmicBatchFile.bat【英文标题】:Prevent wmic.exe from writing TempWmicBatchFile.bat 【发布时间】:2012-09-12 15:30:53 【问题描述】:我想在我的 Java 应用程序中检查 Windows 虚拟键盘是否已经在运行。
我搜索了一下,发现可以使用wmic.exe
来搜索进程。
这就是我正在做的:
Process proc = Runtime.getRuntime().exec("wmic.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(proc
.getInputStream()));
OutputStreamWriter oStream = new OutputStreamWriter(proc
.getOutputStream());
oStream .write("process where name='osk.exe' get caption");
oStream .flush();
oStream .close();
input.readLine();
while ((in = input.readLine()) != null)
if (in.contains("osk.exe"))
input.close();
proc.destroy();
return;
input.close();
proc.destroy();
这是可行的,但wmic
以某种方式创建文件TempWmicBatchFile.bat
与行process where name='osk.exe' get caption
。
我怎样才能防止这种情况发生?
【问题讨论】:
【参考方案1】:您可以避免打开其他流来传递另一个命令。这就是创建临时 bat 文件的原因。
使用下面的代码。它不会创建临时批处理文件
public class WmicTest
public static void main(String[] args) throws IOException
Process proc = Runtime.getRuntime().exec("wmic.exe process where name='osk.exe' get caption");
BufferedReader input = new BufferedReader(new InputStreamReader(proc
.getInputStream()));
// OutputStreamWriter oStream = new OutputStreamWriter(proc
// .getOutputStream());
// oStream.write("process where name='osk.exe' get caption");
// oStream.flush();
// oStream.close();
input.readLine();
String in;
while ((in = input.readLine()) != null)
if (in.contains("osk.exe"))
System.out.println("Found");
input.close();
proc.destroy();
return;
input.close();
proc.destroy();
【讨论】:
完美!正是我想要的:)以上是关于防止 wmic.exe 写入 TempWmicBatchFile.bat的主要内容,如果未能解决你的问题,请参考以下文章