Войти

Показать полную графическую версию : [решено] Узнать с какими параметрами запущен процес


PoltavaPGS
26-10-2011, 18:17
Есть скрипт на VBS

Sub ProgramRun(Path,StartupOptions,PauseTime)
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run("""" & Path & """" & StartupOptions)
WScript.Sleep 1000*PauseTime
Set WshShell = Nothing
End Sub

Function IsRunning (ProcessName)
Dim Process
IsRunning = False
For Each Process in GetObject("winmgmts:"). _
ExecQuery ("select * from Win32_Process where name='" & ProcessName & "'")
IsRunning = True
Exit for
Next
End Function

FullListParameters = Array("C:\WINDOWS\system32\notepad.exe| C:\1.txt>5","C:\WINDOWS\system32\notepad.exe| C:\2.txt>8")

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")'Подключеем FileSystemObject
For Each MyApp in FullListParameters
p = InStr(MyApp, "|")
s = InStr(MyApp, ">")
if p = 0 and s = 0 Then
Path = MyApp
Param = ""
TSec = 2
elseIf p <> 0 and s = 0 Then
Path = Mid(MyApp,1,p-1)
Param = Mid(MyApp,p+1)
TSec = 2
elseIf p <> 0 and s <> 0 Then
Path = Mid(MyApp,1,p-1)
Param = Mid(MyApp,p+1,s-p-1)
TSec = Mid(MyApp,s+1)
else p = 0 and s <> 0
Path = Mid(MyApp,1,s-1)
Param = ""
TSec = Mid(MyApp,s+1)
end if
If FSO.FileExists(Path) and IsRunning(Mid(Path,InStrRev(Path, "\") + 1)) = False Then'
Call ProgramRun(Path, Param, TSec)
end if
Next
Set FSO = Nothing


Скрипт проверяет существует ли файл C:\WINDOWS\system32\notepad.exe, не запущен ли процесс notepad.exe и если оба условия выполняются то запускает программу с нужными параметрами и ждет указанно количество секунд.
Ну а теперь собственно проблема. Нужно запустить блокнот еще раз но с другими параметрами сейчас это не произойдет потому что процесс notepad.exe уже будет существовать
По сути, я так понимаю, задача сводиться к тому чтобы определить что notepad.exe был запущен с другими параметрами. Как это сделать, то есть как узнать параметры с которыми был запущен процесс

Foreigner
26-10-2011, 18:42
Как это сделать, то есть как узнать параметры с которыми был запущен процесс »
Например запускаем notepad:

notepad 1.txt

Теперь узнаем с какими парамеирами:

wmic process where name="notepad.exe" get commandline

Или в батнике для дальнейшей обработки:

@echo off
setlocal

set "wmic=wmic process where name="notepad.exe" get commandline /value"
for /f "tokens=*" %%i in (' "%wmic%" ') do 1>nul set "%%i"

set commandline


Упс.. Не заметил, что нужен vbs

Iska
26-10-2011, 20:37
По сути, я так понимаю, задача сводиться к тому чтобы определить что notepad.exe был запущен с другими параметрами. Как это сделать, то есть как узнать параметры с которыми был запущен процесс »
Коллега Foreigner практически привёл код. То есть, Вам нужно добавить в WMI запрос ещё условие для свойства «.CommandLine».

PoltavaPGS
27-10-2011, 16:10
Всем спасибо. Решил проблему вставив строчку msgbox Process.CommandLine она как раз и отображает нужные мне данные

Function IsRunning (ProcessName)
Dim Process
IsRunning = False
For Each Process in GetObject("winmgmts:"). _
ExecQuery ("select * from Win32_Process where name='" & ProcessName & "'")
msgbox Process.CommandLine
IsRunning = True
Exit for
Next
End Function




© OSzone.net 2001-2012