<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: перезапуск процесса]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3752&amp;type=atom" />
	<updated>2009-10-16T07:27:37Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=3752</id>
		<entry>
			<title type="html"><![CDATA[VBScript: перезапуск процесса]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=29303#p29303" />
			<content type="html"><![CDATA[<p>В данном примере будут перезапущены все процессы Блокнота (по имени процесса — «notepad.exe»). Основная идея скрипта заключается в использовании свойства «.CommandLine» класса «Win32_Process» WMI:<br /></p><div class="codebox"><pre><code>Option Explicit

Dim strProcessName, lngNewPID

Dim objSWbemServicesEx
Dim collSWbemObjectSet, objSWbemObjectEx


strProcessName = &quot;notepad.exe&quot;

Set objSWbemServicesEx = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2&quot;)
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery(&quot;SELECT * FROM Win32_Process WHERE Name = &#039;&quot; &amp; strProcessName &amp; &quot;&#039;&quot;, &quot;WQL&quot;, 0)

If collSWbemObjectSet.Count &gt; 0 Then
    For Each objSWbemObjectEx In collSWbemObjectSet
        With objSWbemObjectEx
            If .Terminate(0) = 0 Then
                If objSWbemServicesEx.Get(&quot;Win32_Process&quot;).Create(.CommandLine, Null, Nothing, lngNewPID) = 0 Then
                    WScript.Echo &quot;Процесс [&quot; &amp; .CommandLine &amp; &quot;] перезапущен успешно; ProcessID:&quot; &amp; lngNewPID &amp; &quot;.&quot;
                Else
                    WScript.Echo &quot;Не удалось запустить процесс [&quot; &amp; .CommandLine &amp; &quot;].&quot;
                End If
            Else
                WScript.Echo &quot;Не удалось завершить процесс [&quot; &amp; .CommandLine &amp; &quot;]; ProcessID:&quot; &amp; .ProcessID &amp; &quot;.&quot;
            End If
        End With
    Next
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0</code></pre></div><p><em>Замечания:</em><br />* для перезапуска процесса, запущенного не от имени текущего пользователя нужно использовать привилегию «Debug», однако новый процесс будет запущен уже от имени текущего пользователя (подразумевается, что пароль владельца процесса априори неизвестен).</p><p><em>Побочные эффекты:</em><br />* вновь запущенный процесс будет иметь текущий каталог, равный каталогу исполняемого файла процесса;<br />* вновь запущенный процесс будет иметь в качестве родительского процесс «%systemroot%\system32\wbem\wmiprvse.exe».</p><p>Автор идеи — <strong>Xameleon</strong>.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2009-10-16T07:27:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=29303#p29303</id>
		</entry>
</feed>
