Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java检测exe中的唯一值?_Java_List_Process_Hex_Exe - Fatal编程技术网

如何使用Java检测exe中的唯一值?

如何使用Java检测exe中的唯一值?,java,list,process,hex,exe,Java,List,Process,Hex,Exe,我现在正在做这件事 public class ProcessKill { private static final String TASKLIST = "tasklist"; private static final String KILL = "taskkill /IM "; public static boolean isProcessRunging(String

我现在正在做这件事

                public class ProcessKill {
                private static final String TASKLIST = "tasklist";
                private static final String KILL = "taskkill /IM ";

                public static boolean isProcessRunging(String serviceName) throws Exception {
                 Process p = Runtime.getRuntime().exec(TASKLIST);
                 BufferedReader reader = new BufferedReader(new InputStreamReader(
                 p.getInputStream()));

                 String line;

                 while ((line = reader.readLine()) != null){
                     System.out.println(line);

                     if (line.contains(serviceName)){
                         return true;
                     }
                 }

                 return false;

                }

                public static void killProcess(String serviceName) throws Exception {

                  Runtime.getRuntime().exec(KILL + serviceName);

                 }  


            }

public static void main(String args[]) throws Exception{
    ProcessKill pkill = new ProcessKill();
    String processName = "wmplayer.exe";

    if (pkill.isProcessRunging(processName)){
        pkill.killProcess(processName);
    }

}
唯一的问题是,如果名字改变了怎么办?我不想一直更新代码。有没有一种方法可以获取.exe文件的十六进制值并将其读入Java以便它检测到它


谢谢

首先,您可以通过执行
wmic.exe process,其中name='“+processName+”
检查要终止的进程是否正在运行-尽管wmic提供了一个进程删除选项,但java进程在调用该选项时会阻塞
wmic PROCESS
(没有任何指定的进程名称)返回windows计算机上当前正在运行的所有进程的列表(和说明),您可以使用
InputsRealReader()
读入该列表,然后迭代所有正在运行的进程,并检查其中哪些进程可能是您的目标进程。此外,目标进程的行包含传递给进程的参数,如果有多个进程正在运行或需要删除应用程序使用的某些资源文件,则可以使用这些参数来区分进程


在调试使用嵌入式mongodb进行单元测试的应用程序时,在调试后,嵌入式mongod进程继续运行,并拒绝进行下一个单元测试(因为单元测试清理未正确执行)-此外,它创建了一个本地数据存储,无法被新的嵌入式mongod进程覆盖-因此需要手动删除。因此,我从WMIC返回的行中提取了文件,并在自动终止进程后删除了文件。

据我所知,您不希望保留硬编码的进程名称。在这种情况下,只需通过命令行参数传递:

public static void main(String args[]) throws Exception{
    ProcessKill pkill = new ProcessKill();
    String processName = args[0];

    if (pkill.isProcessRunging(processName)){
        pkill.killProcess(processName);
    }

}
现在,用户必须在命令行中提供要终止的进程名称:

:>ProcessKill notepad.exe


然而,我不明白为什么你需要你的实用程序呢?实际上,您只需运行
processkill
,用户就可以直接使用它了。您的实用程序不提供任何附加功能

你到底想要什么?您的代码只是按名称终止任务,我个人不理解短语“如果相同的内容发生了变化”的含义。同样的什么?同样的过程?相同的可执行文件?抱歉,输入错误。这本来是要写的,现在写的是“名字”。