<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: перезапуск процесса]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=3752</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3752&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: перезапуск процесса».]]></description>
		<lastBuildDate>Fri, 16 Oct 2009 07:27:37 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBScript: перезапуск процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=29303#p29303</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 16 Oct 2009 07:27:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=29303#p29303</guid>
		</item>
	</channel>
</rss>
