从外部应用程序
我试图找出什么是运行该批处理文件从外部应用程序的完整路径获得一个运行该批处理文件的名称。 该进程是cmd.exe,但我无法获得实际运行蝙蝠的名称。 在任务管理器中,它显示为cmd.exe 如果我将该过程作为对象获取,则与该蝙蝠最近的属性位于MainWindowTitle中。 有没有办法从运行cmd进程中获得完整的运行bat路径?从外部应用程序
回答:
的问题How to check if a process is running via a batch script?的answer written by vtrz包含你正在寻找的命令:
%SystemRoot%\System32\wbem\wmic.exe PROCESS where (name="cmd.exe") GET CommandLine
Windows Management Instrumentation Command-line实用程序与这些参数通过用于启动它们的命令行行列出所有正在运行的进程cmd.exe
线。
但是,这意味着如果用户打开命令提示符窗口并从此窗口中启动批处理文件(由已启动cmd.exe
执行),则此命令进程的命令行输出仅为"C:\Windows\System32\cmd.exe"
。据我所知,无法从已经运行的命令进程中获取该命令进程当前执行的信息。
好吧,如果执行的批处理文件中使用命令冠军给自己的控制台窗口意义的标题,也可以使用任务列表获取有关命令进程的信息与特定的窗口标题或使用TASKKILL终止或杀死一个具有特定窗口标题的命令进程。
回答:
这是我结束了(VB.NET)的功能,如果有人在意。它可以从cmd.exe进程检索蝙蝠路径,也可以使用它从wscript.exe获取vbs文件。它接收cmd.exe或wscript.exe的ProcessID作为参数,并返回一个字符串列表,因为我还需要将参数文件传递给vbs。解析部分在我使用它的场景中的列表中工作良好。
Function GetArgFiles(PID As Integer) As List(Of String) Dim Ret As New List(Of String)
Try
Dim MOS As New ManagementObjectSearcher("root\CIMV2", "SELECT Name, CommandLine FROM WIN32_Process where ProcessID = '" & PID & "'")
For Each MO As ManagementObject In MOS.[Get]()
Try
Dim name As String = MO.GetPropertyValue("Name")
Dim CommandLine As String = MO.GetPropertyValue("CommandLine")
If CommandLine Is Nothing Then Exit Try
For Each CLE As String In New List(Of String)(CommandLine.Split(Chr(34)))
Try
CLE = CLE.Trim
If CLE.Length < 5 Then Continue For
If CLE.ToLower Like "*" & name.Trim.ToLower & "*" Then Continue For
If CLE Like "*:\*" Then
CLE = CLE.Substring(CLE.LastIndexOf(":\") - 1)
Else
Continue For
End If
If CLE.Contains("/") Then CLE = CLE.Substring(0, CLE.LastIndexOf("/"))
If CLE.Substring(5).Contains(":") Then CLE = CLE.Substring(0, CLE.LastIndexOf(":"))
If File.Exists(CLE.Trim) Then Ret.Add(CLE.Trim)
Catch
End Try
Next
Catch
End Try
Next
Catch
End Try
Return Ret
End Function
以上是 从外部应用程序 的全部内容, 来源链接: utcz.com/qa/259269.html