问题
在批处理文件的一部分(有点,请参阅额外信息)我需要重新启动资源管理器,所以我使用经过试验和测试的方法
taskkill /f /im explorer.exe >nul
explorer.exe
Run Code Online (Sandbox Code Playgroud)
然后发生这种情况
explorer.exe
成功终止explorer.exe
启动(见图2),但只打开一个资源管理器窗口,我将无限期地留下(参见图1)然后,我只能通过从任务管理器启动一个新任务来正确地重新启动资源管理器,因为我认为,它Win + R
是资源管理器的一部分.
额外的信息
现在,我说"有点",因为我正在使用WinRAR创建的自执行SFX存档运行批处理文件.因此,在执行时,存档的内容被提取到,%temp%
并且在成功提取时运行用户定义的文件(通常是引导过滤器,在这种情况下,我的批处理文件).
到目前为止,我已经推断过了
explorer.exe
肯定是被完全杀死了.explorer.exe
start explorer.exe | cmd.exe
Explorer这样的命令没有正确重启,所以它绝对不是.bat
文件的问题.我可以确认它适用于Windows XP和Windows 7 x86,但不适用于Windows 7 x64(这是我的系统).
状态
目前,我对WinRAR持怀疑态度,因为我已经证明代码本身有效.所以,我正在用不同版本的WinRAR创建自执行的SFX.到目前为止,我已尝试过版本:
并且每次都有相同的结果.
我昨天向dev@rarlab.com提交了一份错误报告,今天早上得到了Eugene Roshal的答复
您好,SFX模块使用ShellExecuteEx来启动安装应用程序.通常它运作良好.我不知道为什么Explorer决定切换到窗口模式.现在我构建了一个小型独立程序
#include <windows.h>
void main()
{
SHELLEXECUTEINFO si;
memset(&si,0,sizeof(si));
si.cbSize=sizeof(si);
si.lpFile="test.bat";
si.nShow=SW_SHOWNORMAL;
ShellExecuteEx(&si);
}
Run Code Online (Sandbox Code Playgroud)
它运行test.bat,其中包含样本中的内容.此程序显示与WinRAR SFX完全相同的行为,因此Explorer在窗口中启动.
和今天早上的第二封电子邮件
对不起,现在没有建议.我用CreateProcess替换了ShellExecuteEx
#include <windows.h>
void main()
{ …
Run Code Online (Sandbox Code Playgroud) 我刚读了以下命令:
taskkill /f /im something.exe
我读到这会/f
迫使任务结束,但是/im
做了什么?
似乎每当我在Windows 8中打开一个程序时,进程名称就是 WWAHost.exe
我希望能够做一些类似的事情,TASKKILL /F /IM notepad.exe
并按名称终止一个特定的过程
如果我杀了WWAHost.exe
那么所有开放的程序都会死
有任何想法吗?
start命令可以在批处理文件中启动像记事本这样的应用程序,如下所示:
start notepad
start "my love.mp3"
Run Code Online (Sandbox Code Playgroud)
但是如何从命令行关闭正在运行的应用程序?我发现taskkill
在我的搜索中,但我不认为这是正确的命令,因为它不起作用 - 它说没有这样的文件.
如何关闭启动的应用程序start
?
我想写一个简单的批处理文件来杀死包含窗口标题中某些文本的进程.现在我有:
taskkill /fi "Windowtitle eq XXXX*" /im cmd.exe
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了我想要做的是在标题的开头和结尾都使用通配符.所以类似于:
taskkill /fi "Windowtitle eq \*X*" /im cmd.exe
Run Code Online (Sandbox Code Playgroud)
但我试过这个并没有用.有什么我想念的或者这不可能吗?
我有时会得到一个过程,如果我跑taskkill /im the_process.exe /f /t
,那么它不会杀死它,因为:
ERROR: The process with PID 6492 (child process of PID 5788) could not be terminated.
Reason: There is no running instance of the task.
但是如果我打开任务管理器并单击结束进程,它就会消失.为什么任务管理器工作但是taskkill不行?我需要能够以编程方式终止进程,因此我需要找到一个能够成功终止此进程的CLI命令.
我已经google了一下,但我还没有找到合适的解决方案.
在我的MSI安装程序自定义操作处理程序(使用C++完成)中,我无法获得SE_DEBUG_NAME权限以便能够打开和终止进程,因此我不得不求助于使用该taskkill
实用程序:
taskkill /f /pid 1230
Run Code Online (Sandbox Code Playgroud)
我需要知道的是taskkill
能够看到过程是否终止的返回码以及它可能没有的原因.
我能够在Windows 8机器上通过实验获得以下内容:
0 = success
1 = access denied
128 = no such process
Run Code Online (Sandbox Code Playgroud)
这些是官方文件吗?
为什么我要问的是我的程序使用的第三方软件有时会留下孤立的进程,这些进程没有链接回我的程序或第三方进程.随着时间的推移,这些孤儿进程开始累积并消耗大量资源.我想定期杀掉它们,但为了让我这样做,我需要确定它们是由我的程序而不是其他程序创建的.我查看了Process Explorer中的孤立进程,当查看进程的属性时,我看到一个名为"Current Directory"的字段.孤立进程的当前目录是我的程序的安装目录.这会让我放心,我正在杀死我的程序创建的进程.
由于这些进程是由第三方创建的,因此我需要在创建它们之后通过对它们运行taskkill来杀死它们.有没有办法在批处理文件中使用开箱即用的Windows命令来确定进程的当前工作目录?如果这可以通过最好的wmic查询来完成,但是在使用wmic时我似乎无法找到当前的工作目录.我假设如果Process Explorer能够获得此信息,我应该能够通过一些批处理命令获得它.
我想杀死在android中运行的所有任务,比如任务杀手......到目前为止,我所做的是:
ActivityManager manager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> activityes = ((ActivityManager) manager).getRunningAppProcesses();
for (int i = 0; i < activityes.size(); i++){
Log.e("APP: "+i, activityes.get(0).processName);
if (!activityes.get(0).processName.equals("app.android.myapp")){
Process.killProcess(activityes.get(0).pid);
}
}
Run Code Online (Sandbox Code Playgroud)
代码的问题是它只在我的应用程序的活动列表中返回了12次.没有任务被杀死......
有人可以帮帮我吗?谢谢!
我需要帮助编写批处理代码.
在我的批处理脚本的初始状态中,我需要检查是否notepad.exe
正在运行,如果它正在运行,那么
taskkill /im notepad.exe
elsif notepad.exe
没有运行,那么转到下一个批处理语句/代码.