我一直在研究以下内容(显然使用不同的应用程序):
@echo off
tasklist /FI "IMAGENAME eq AutoHotkey.exe" | find /i "AutoHotkey.exe"
IF ERRORLEVEL 2 GOTO NEXTPROGRAM
IF ERRORLEVEL 1 GOTO LAUNCHPROGRAM
:NEXTPROGRAM
goto LOLLAUNCHER
:LAUNCHPROGRAM
start "" "C:\Program Files\AutoHotkey\AutoHotkey.exe"
goto LOLLAUNCHER
:LOLLAUNCHER
tasklist /FI "IMAGENAME eq LoLLauncher.exe" | find /i "LoLLauncher.exe"
IF ERRORLEVEL 2 GOTO NEXTPROGRAM2
IF ERRORLEVEL 1 GOTO LAUNCHPROGRAM2
:NEXTPROGRAM2
goto COMPLETE
:LAUNCHPROGRAM2
start "" "C:\Program Files (x86)\League of Legends\lol.launcher.exe"
goto COMPLETE
我把这个放在一个批处理文件中,当用户登录或解锁计算机时运行。这部分工作得很好,但我需要进一步完善。
最终,这些数据将分布在机场航班柜台的几台计算机上。由于他们的工作性质,他们告诉我,他们可能会有多个用户在同一台计算机上使用相同的 3 个应用程序。
作为一个有安全意识的人,我指导他们使用个人登录,这样我们就可以跟踪谁在系统上做什么。所以我想我的问题是 - 我如何改变它来检查在特定用户会话中而不是仅在计算机本身上运行的进程?问题是,如果用户登录并正在运行其应用程序,然后离开,但另一个用户需要跳到该站点来帮助客人,则脚本将运行 - 识别进程正在运行,然后不执行任何操作。我需要编辑它以检查该用户的会话中的进程是否正在运行。我希望这有意义。
答案1
添加/V
选项让 tasklist 也列出用户名。然后将命令导入另一个 findstr。示例:
tasklist /FI "IMAGENAME eq AutoHotkey.exe" /V | find /i "AutoHotkey.exe" | findstr /i %username%
%username%
是一个系统变量,因此这会找到当前登录用户的应用程序。