Войти

Показать полную графическую версию : Высокий приоритет заданному процессу


7human7
15-03-2010, 08:13
Можно-ли добавить сам процесс в исключения, и теперь, при любом запуске этого процесса он будет запускаться с высоким приоритетом.. но как?

7human7
16-03-2010, 15:32
Установил Prio (http://img.photobucket.com/albums/v374/vishaal_here/Save_Process_Priority.png).
Вроде то, что мне нужно. Т.е. как бы я не запускал этот процесс, он все время будет в высоком приоритете.

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

Iska
16-03-2010, 17:55
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 (http://www.prnwatch.com/rus/prio.html) Вы уже решили свою проблему?

7human7
19-03-2010, 20:12
Нет, не решил. После запуска Windows'а по новой приоритет возвращается "по умолчанию", и приходится заново ставить "высокий приоритет".

Iska, каким из этих мне воспользоваться? Я почему говорю определенный процесс, потому что если взять одну игру:
http://s004.radikal.ru/i205/1003/6d/5134d0f3f86dt.jpg (http://s004.radikal.ru/i205/1003/6d/5134d0f3f86d.jpg)

Запускается с LaunchGTAIV.exe, при этом если нажать на GTAIV.exe - ничего не происходит.
После нажатия на LaunchGTAIV.exe в процессах сначала появляется процесс LaunchGTAIV.exe, а потом уже GTAIV.exe:
http://i062.radikal.ru/1003/d3/95a8face7761.jpg
на который и нужно задать "высокий приоритет".

Iska
19-03-2010, 21:57
7human7, тогда попробуйте поиграться со вторым скриптом из поста #3 (http://forum.oszone.net/post-1370047-3.html), указав в строке:
strPath2FileName = "c:\windows\system32\notepad.exe"
вместо пути к Блокноту полный путь к «GTAIV.exe».

7human7
20-03-2010, 06:52
Потом сохранить как .bat?
И потом с него мне запускать игру? Но как я сказал, с GTAIV.exe игра не запускается, она запускается только с LaunchGTAIV.exe в папке с игрой.

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

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

7human7
20-03-2010, 18:23
Да, выставляется.
Жалко Prio не сохраняет приоритеты и после перезапуска windows, а так через него было бы проще.

Iska
22-03-2010, 00:04
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
Жалко Prio не сохраняет приоритеты и после перезапуска windows, а так через него было бы проще. »
http://www.prnwatch.com/rus/prio.html

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

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

7human7
28-03-2010, 23:58
попробуйте новый вариант »
он делает средний приоритет
:(

MrLOLs
19-09-2010, 15:43
start /realtime process.exe
start /high process.exe
start /low process.exe
....

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

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

Zse3tdlm
26-01-2012, 16:34
Простите, что поднимаю такую старую тему.
Отмечу, приоритет процессу можно задать и через реестр. В итоге, мы получаем запуск программы с желаемым приоритетом.

Для этого переходим к разделу реестра
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 - приоритет выше среднего.




© OSzone.net 2001-2012