在批处理脚本中,我需要获取给定二进制pathC:pathtobinary.exe的进程ID列表。 在Linux中,我只能做pidof /path/to/binary 。
是否有一个Win32可执行文件相同,从WinXP主页到Win7的支持(任务列表不起作用)?
包含这个的软件包必须是可移植的,所以10MB的下载并不是我想要的。
有没有一个C函数可以做到这一点,是从WinXP支持Win7的? 注意:我想匹配一个进程path,而不是其他应用程序可以使用的文件名。
在Windows任务计划程序中的wscript.exe
在嵌套的批处理脚本中执行PHP脚本
如何在Windowsbatch file中使用setx命令
如何将控制台输出redirect到文件,并仍然在控制台中获取?
batch file属性检查
在TFS构buildGit操作:“致命:无法读取密码”(wincred使用)
如何使用Windowsbatch file删除不包含某些字符的文件?
您可以使用Toolhelp API来枚举进程,获取完整路径并将其与所需的进程名称进行比较。 你需要走每个进程的模块列表。 列表中的第一个模块是进程可执行文件本身。 这是一个示例代码:
int main( int argc,char* argv[] ) { if( argc > 1 ) { printf( "nGetting PID of: %sn",argv[1] ); HANDLE hProcSnapshot = ::Createtoolhelp32Snapshot( TH32CS_SNAPPROCESS,0 ); if( INVALID_HANDLE_VALUE != hProcSnapshot ) { PROCESSENTRY32 procEntry = {0}; procEntry.dwSize = sizeof(PROCESSENTRY32); if( ::Process32First( hProcSnapshot,&procEntry ) ) { do { HANDLE hModSnapshot = ::Createtoolhelp32Snapshot( TH32CS_SNAPMODULE,procEntry.th32ProcessID ); if( INVALID_HANDLE_VALUE != hModSnapshot ) { MODULEENTRY32 modEntry = {0}; modEntry.dwSize = sizeof( MODULEENTRY32 ); if( modulee32First( hModSnapshot,&modEntry ) ) { if( 0 == stricmp( argv[1],modEntry.szExePath ) ) { printf( "nPID: %ldn",procEntry.th32ProcessID ); ::CloseHandle( hModSnapshot ); break; } } ::CloseHandle( hModSnapshot ); } } while( ::Process32Next( hProcSnapshot,&procEntry ) ); } ::CloseHandle( hProcSnapshot ); } } return 0; }
wmic.exe在XP,Vista和7上可用,可以做到这一点。 但是,它不包含在Windows XP Home Edition中。
wmic process where ExecutablePath='C:\windows\system32\notepad.exe' get ProcessId
如果您还想要支持Windows XP Home,则可以使用EnumProcess和GetmoduleeFileNameEx 。 这里的缺点是,如果你没有以管理员身份运行,你将无法查询其他用户正在运行的进程的名字。 QueryFullProcessImageName可能会在这里做的伎俩,但它是Vista +。
如果这还不够,你需要Process32First (swatkat的代码)。 对于每个进程,您需要调用modulee32First ,然后获取MODULEENTRY32->szExePath 。 请注意,即使这不是完全可移植的,并且在需要QueryFullProcessImageName的 x64上将无法正常工作。
您可以编写一个首先调用Process.GetProcessesByName(String)的小型C#应用程序,然后查看结果并在Mainmodulee中打印每个的Id属性。 FileName等于您正在查找的路径。
PowerShell可以解决你的问题,如果是在Win 7中建立,并可以在其他操作系统上下载。
param($fileName) Get-Process | where -FilterScript {$_.Mainmodulee.FileName -eq $fileName}
这个脚本将接收一个参数,你正在寻找的文件名,它将输出其可执行文件的文件名。
powershell -Command“&{Get-Process | where -FilterScript {$ _。Mainmodulee.FileName -eq%FILENAME%}”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。