Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Высокий приоритет заданному процессу (http://forum.oszone.net/showthread.php?t=170191)

7human7 15-03-2010 08:13 1368913

Высокий приоритет заданному процессу
 
Можно-ли добавить сам процесс в исключения, и теперь, при любом запуске этого процесса он будет запускаться с высоким приоритетом.. но как?

7human7 16-03-2010 15:32 1369914

Установил Prio.
Вроде то, что мне нужно. Т.е. как бы я не запускал этот процесс, он все время будет в высоком приоритете.

И всё-таки, средствами windows это никак нельзя решить? Сохранить приоритет на определенный процесс.

Iska 16-03-2010 17:55 1370047

7human7, «средствами Windows», как это сформулировано Вами — нет. Можно сделать скрипт, либо изначально запускающий требуемый процесс с повышенным приоритетом, либо следящий за созданием процессов и повышающий приоритет процесса, совпадающего по исполняемому пути с искомым.

Например, для Блокнота сие может выглядеть так:
* запуск процесса с повышенным приоритетом:

читать дальше »
Код:

Option Explicit

Const HIGH_PRIORITY_CLASS = &H00000080

Dim strPath2FileName

Dim objSWbemServicesEx
Dim objSWbemObjectEx_Win32_ProcessStartup
Dim intProcessID


strPath2FileName = "c:\windows\system32\notepad.exe"

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemObjectEx_Win32_ProcessStartup = objSWbemServicesEx.Get("Win32_ProcessStartup").SpawnInstance_

objSWbemObjectEx_Win32_ProcessStartup.PriorityClass = HIGH_PRIORITY_CLASS

If objSWbemServicesEx.Get("Win32_Process").Create( _
        Replace(strPath2FileName, "\", "\\"), Null, objSWbemObjectEx_Win32_ProcessStartup, intProcessID) <> 0 Then
       
        WScript.Echo "Can't create process [" & strPath2FileName & "]"
End If

Set objSWbemObjectEx_Win32_ProcessStartup = Nothing
Set objSWbemServicesEx                    = Nothing

WScript.Quit 0


* слежение за созданием процессов и повышение приоритета заданного процесса:
читать дальше »
Код:

Option Explicit

Const HIGH_PRIORITY_CLASS = &H00000080

Dim strPath2FileName

Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx
Dim intProcessID


strPath2FileName = "c:\windows\system32\notepad.exe"

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")


Set collSWbemObjectSet = objSWbemServicesEx.ExecNotificationQuery( _
        "SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
        "WHERE TargetInstance ISA 'Win32_Process' " & _
        "AND TargetInstance.ExecutablePath = '" & Replace(strPath2FileName, "\", "\\") & "'")

Do
        Set objSWbemObjectEx = collSWbemObjectSet.NextEvent
       
        If objSWbemObjectEx.TargetInstance.SetPriority(HIGH_PRIORITY_CLASS) <> 0 Then
                WScript.Echo "Can't set priority of process [" & strPath2FileName & "]"
        End If
Loop

Set objSWbemObjectEx  = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0


Насколько я понимаю, установив Prio - Priority Saver Вы уже решили свою проблему?

7human7 19-03-2010 20:12 1372667

Нет, не решил. После запуска Windows'а по новой приоритет возвращается "по умолчанию", и приходится заново ставить "высокий приоритет".

Iska, каким из этих мне воспользоваться? Я почему говорю определенный процесс, потому что если взять одну игру:


Запускается с LaunchGTAIV.exe, при этом если нажать на GTAIV.exe - ничего не происходит.
После нажатия на LaunchGTAIV.exe в процессах сначала появляется процесс LaunchGTAIV.exe, а потом уже GTAIV.exe:

на который и нужно задать "высокий приоритет".

Iska 19-03-2010 21:57 1372739

7human7, тогда попробуйте поиграться со вторым скриптом из поста #3, указав в строке:
Код:

strPath2FileName = "c:\windows\system32\notepad.exe"
вместо пути к Блокноту полный путь к «GTAIV.exe».

7human7 20-03-2010 06:52 1372942

Потом сохранить как .bat?
И потом с него мне запускать игру? Но как я сказал, с GTAIV.exe игра не запускается, она запускается только с LaunchGTAIV.exe в папке с игрой.

Iska 20-03-2010 15:04 1373183

Цитата:

Потом сохранить как .bat?
Сохранить этот изменённый указанным выше образом скрипт в файле с произвольным именем и расширением «.vbs» в любой папке. Запускать скрипт вручную перед запуском игры.

P.S. Проверьте, будет ли выставляться для процесса «GTAIV.exe» повышенный приоритет и отпишитесь сюда. При положительном ответе я поменяю логику скрипта.

7human7 20-03-2010 18:23 1373319

Да, выставляется.
Жалко Prio не сохраняет приоритеты и после перезапуска windows, а так через него было бы проще.

Iska 22-03-2010 00:04 1374110

7human7, попробуйте новый вариант:
читать дальше »
Код:

Option Explicit

Const HIGH_PRIORITY_CLASS = &H00000080

Dim objSWbemServicesEx
Dim objSWbemSink

Dim strPath2StartFileName
Dim strPath2WorkingDirectory
Dim strPath2SearchFileName

Dim intProcessID
Dim boolDone


strPath2StartFileName    = "c:\Program Files\Far\Far.exe"    ' Путь к LaunchGTAIV.exe, берём с ярлыка свойство «Объект»
strPath2WorkingDirectory = "c:\Temp"                        ' Рабочий каталог, берём с ярлыка свойство «Рабочая папка»
strPath2SearchFileName  = "c:\windows\system32\notepad.exe" ' Путь к GTAIV.exe

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemSink      = WScript.CreateObject("WbemScripting.SWbemSink","Sink_")

objSWbemServicesEx.ExecNotificationQueryAsync objSWbemSink, _
        "SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
        "WHERE TargetInstance ISA 'Win32_Process' " & _
        "AND TargetInstance.ExecutablePath = '" & Replace(strPath2SearchFileName, "\", "\\") & "'"

If objSWbemServicesEx.Get("Win32_Process").Create( _
        Replace(strPath2StartFileName, "\", "\\"), strPath2WorkingDirectory, Nothing, intProcessID) <> 0 Then
       
        WScript.Echo "Can't create process [" & strPath2StartFileName & "]"
Else
        boolDone = False
       
        Do
                Wscript.Sleep 100
        Loop Until boolDone
End If

objSWbemSink.Cancel

Set objSWbemSink      = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub Sink_OnObjectReady(objSWbemObjectEx, objSWbemAsyncContext)
        If objSWbemObjectEx.TargetInstance.SetPriority(HIGH_PRIORITY_CLASS) <> 0 Then
                WScript.Echo "Can't set priority of process [" & strPath2SearchFileName & "]"
        End If
       
        boolDone = True
End Sub
'=============================================================================


Значения переменных «strPath2StartFileName», «strPath2WorkingDirectory», «strPath2SearchFileName» правите под себя, как указано в комментариях, сохраняете скрипт с расширением «.vbs» и запускаете.

Severny 22-03-2010 00:13 1374114

Цитата:

Цитата 7human7
Жалко Prio не сохраняет приоритеты и после перезапуска windows, а так через него было бы проще. »

http://www.prnwatch.com/rus/prio.html

Тут утверждается обратное. Приоритет сохраняется.
Галочку ставить не забываем?

Iska 22-03-2010 14:05 1374458

Severny, меня тоже удивило утверждение коллеги 7human7, но, поскольку у меня нет ни «Prio», ни «GTAIV», я решил, что ему, имеющему и то, и другое, виднее ;).

7human7 28-03-2010 23:58 1379422

Цитата:

Цитата Iska
попробуйте новый вариант »

он делает средний приоритет
:(

MrLOLs 19-09-2010 15:43 1499118

start /realtime process.exe
start /high process.exe
start /low process.exe
....

7human7 10-04-2011 10:21 1655115

MrLOLs, если бы все было так просто, игра может запускаться (в случае с GTA 4) процессом launch.exe, а потом появляется новый процесс (от него уже) gta4.exe

так что не катит, зачем высокий приоритет launch.exe, если нужно для gta4.exe?

Zse3tdlm 26-01-2012 16:34 1844980

Простите, что поднимаю такую старую тему.
Отмечу, приоритет процессу можно задать и через реестр. В итоге, мы получаем запуск программы с желаемым приоритетом.

Для этого переходим к разделу реестра
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
В этой ветке создаём раздел с именем процесса, который хотим изменить.
Далее в созданном разделе создаём ещё один раздел с названием PerfOptions, а уже в нём создаём параметр DWORD с названием CpuPriorityClass и задаём ему одно из десятичных значений: 1, 3, 5, 6 или 8, где
Код:

8 - средний приоритет;
1 - низкий приоритет;
3 - высокий приоритет;
5 - приоритет ниже среднего;
6 - приоритет выше среднего.



Время: 16:31.

Время: 16:31.
© OSzone.net 2001-