Показать полную графическую версию : Высокий приоритет заданному процессу
Можно-ли добавить сам процесс в исключения, и теперь, при любом запуске этого процесса он будет запускаться с высоким приоритетом.. но как?
Установил Prio (http://img.photobucket.com/albums/v374/vishaal_here/Save_Process_Priority.png).
Вроде то, что мне нужно. Т.е. как бы я не запускал этот процесс, он все время будет в высоком приоритете.
И всё-таки, средствами windows это никак нельзя решить? Сохранить приоритет на определенный процесс.
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) Вы уже решили свою проблему?
Нет, не решил. После запуска 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
на который и нужно задать "высокий приоритет".
7human7, тогда попробуйте поиграться со вторым скриптом из поста #3 (http://forum.oszone.net/post-1370047-3.html), указав в строке:
strPath2FileName = "c:\windows\system32\notepad.exe"
вместо пути к Блокноту полный путь к «GTAIV.exe».
Потом сохранить как .bat?
И потом с него мне запускать игру? Но как я сказал, с GTAIV.exe игра не запускается, она запускается только с LaunchGTAIV.exe в папке с игрой.
Потом сохранить как .bat?
Сохранить этот изменённый указанным выше образом скрипт в файле с произвольным именем и расширением «.vbs» в любой папке. Запускать скрипт вручную перед запуском игры.
P.S. Проверьте, будет ли выставляться для процесса «GTAIV.exe» повышенный приоритет и отпишитесь сюда. При положительном ответе я поменяю логику скрипта.
Да, выставляется.
Жалко Prio не сохраняет приоритеты и после перезапуска windows, а так через него было бы проще.
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» и запускаете.
Жалко Prio не сохраняет приоритеты и после перезапуска windows, а так через него было бы проще. »
http://www.prnwatch.com/rus/prio.html
Тут утверждается обратное. Приоритет сохраняется.
Галочку ставить не забываем?
Severny, меня тоже удивило утверждение коллеги 7human7, но, поскольку у меня нет ни «Prio», ни «GTAIV», я решил, что ему, имеющему и то, и другое, виднее ;).
попробуйте новый вариант »
он делает средний приоритет
:(
start /realtime process.exe
start /high process.exe
start /low process.exe
....
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.