Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Как выставить приоритет программе (как сервис) в WindowsXP ?

Автор: Cuba
Дата сообщения: 20.07.2002 16:31
Запускается при загрузке машины у меня программа как сервис. Нужно выставить её приоритет в виндовсе ХР. Как это сделать ?
Автор: Cuba
Дата сообщения: 23.07.2002 12:47
Ну чё ни кто не знает ?
ХЕЕЕЕЕЕЕЕЕЕЛЛЛЛЛЛЛЛЛЛЛПППППППП !!!!!!!!!!!!!
Автор: new yorik
Дата сообщения: 23.07.2002 16:03
Cuba
не поднимай темы.
Автор: Advanced_Guest
Дата сообщения: 27.11.2005 03:22
Сори за поднятие темы, но такая проблема:

Нужно изменить приоритет запускаемого сервиса.

По умолчанию он запускаеться в "Normal" нужно поставить ему "high"

Как это можно сделать ?
Автор: Ici Chacal
Дата сообщения: 29.11.2005 10:24
Advanced_Guest
Вот что я нарыл во встроенной справке по ХР:

Цитата:
Чтобы выделить системные ресурсы для программы MS-DOS и изменить время ее простоя
Откройте папку Мой компьютер.
Найдите программу MS-DOS (файл .exe), файл описания программы (PIF) или ярлык, который требуется изменить. Имя нужного файла см. в документации, поставляемой вместе с программой.
Щелкните значок правой кнопкой мыши и выберите команду Свойства.
В окне Свойства щелкните вкладку Разное.
Переместите ползунок Приоритет при ожидании для получения нужного результата.
Чтобы выделить программе в фоновом режиме больше ресурсов процессора, передвиньте ползунок в сторону Низкий.
Чтобы уменьшить выделяемые программе ресурсы процессора, передвиньте ползунок в сторону Высокий.

Только вот незадача. Прокатывает только если .exe меняешь .com Хотя может это мой локальный глюк.
Автор: Advanced_Guest
Дата сообщения: 29.11.2005 10:56
Ici Chacal
Не совсем то

Не особо получиться изменить настройки сервиса таким образом

Нашёл способ менять вручную, когда сервис запущен (через продвинутый taskmanager), но надо каждый раз после рестарта менять, а это не то
Автор: Uriu
Дата сообщения: 01.12.2005 06:49
Advanced_Guest
Если Вас устроит приоритет "Выше среднего", то завтра утром скрипт на VBS выложу.
"Высокий" у меня не получается. WMI не разрешает этого сделать. Я правда невнимательно
прочитал Ваш пост. Скрипт писал для notepad.exe . Может для сервиса можно и "высокий" поставить.
Автор: Bezzz
Дата сообщения: 01.12.2005 07:08
Process Supervisor, nnCron?
или использовать команду START (командная консоль). Применять так: start {/low |/normal |/high |/realtime} имя_приложения. Например, для запуска Блокнота с высоким приоритетом в меню "Выполнить" кнопки "Пуск" должно получиться примерно следующее: cmd /c start /high notepad
Автор: Uriu
Дата сообщения: 01.12.2005 07:42
Bezzz
То что Вы предложили "cmd /c start /high notepad" работает. Мне стало еще интересней скриптом так запустить. Для запуска скриптом нужно вводить константу для указания приоритета процесса. Самое большое что я нашел в WMI 32nnn. Число точно не помню.
Теперь наверное найдется и больше. Спасибо.
Автор: bredonosec
Дата сообщения: 01.12.2005 11:18
насчет способа cmd /c start /high - слышал и раньше. Вроде также был некий способ через реестр как-то подправить, чтоб всегда (если сервис запускается автоматически, а не вручную) запускался с нужным приоритетом. Вот его бы напомнить неплохо..
Автор: Bezzz
Дата сообщения: 01.12.2005 12:57
bredonosec
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder
Открываешь параметр List. Чем ближе к началу прописана группа, тем выше у нее приоритет и очередность запуска.
Создаешь там запись, типа blablabla
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Ищешь там свою службу AAAA
Если у нее не определен параметр Group, то создаешь его ("Правка-Создать-Строковый параметр". Название параметра указываем - "Group". Теперь надо определить его значение. Два раза кликаем на слово "Group", и в открывшемся окне пишем название созданной нами группы - "blablabla").
REBOOT
%)
Автор: bredonosec
Дата сообщения: 01.12.2005 14:33

Цитата:
Чем ближе к началу прописана группа, тем выше у нее приоритет и очередность запуска.
- Насчет очередности запуска это логично. И совпадает со смыслом названия ветки.
Но приоритет-то всего 4 значения имеет. Если групп штук 10-20, то где определение границ, какая есть нормал, какя высокий, какая реалтайм?
Автор: Uriu
Дата сообщения: 02.12.2005 05:57
Тема вроде "увядает". Я все же помещу два скрипта на vbs (работал все же), с подробностями. Может кому понадобится запускать не только на локальной но и на удаленной машине. Если процесс не запущен то первый скрипт:

[more]'*******************************************************************
' Язык: VBScript
' Описание: Запуск нового процесса с заданным приоритетом
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim objService ' Объект SWbemServices
Dim objProcess ' Объект SWbemObject (класс Win32_Process)
Dim objStartup ' Объект SWbemObject (класс Win32_ProcessStartup)
Dim objConfig ' Объект SWbemObject (экземпляр класса
' Win32_ProcessStartup)
Dim iError ' Значения, возвращаемое методом
Dim intProcessID ' Идентификатор созданного процесса

' Определяем константы
Const WINDOW = 9 'Константа от 0-12 разные способы отображения окна, 11-12-видно только в диспетчере задач
Const cPriority = 256 ' Константа определяет приоритет 32,64,128,256,16384,32768- "Выше среднего"
' 256 - "высокий", 16384-"ниже среднего"

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "." ' Точка для локального, имя для удаленного

' Подключаемся к пространству имен WMI
Set objService = GetObject("WinMgmts:\\" & _
strComputer & "\" & "Root\CIMV2")

' Создаем новый экземпляр класса Win32_ProcessStartup- новый процесс
Set objStartup = objService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_

' Устанавливаем режим запуска в окне (свернуть,развернуть,скрыть вообще)
objConfig.ShowWindow =WINDOW
' Устанавливаем приоритет в зависимости от константы
objConfig.PriorityClass = cPriority

' Еще раз подключаемся к пространству имен WMI,к другому классу
Set objProcess = GetObject("WinMgmts:\\" & _
strComputer & "\" & "Root\CIMV2" & ":Win32_Process")

' Запускаем блокнот методом Create
iError = objProcess.Create _
("Notepad.exe", null, objConfig, intProcessID)

' Проверяем ошибку запуска
If iError <> 0 Then
' Выводим на экран сообщение об ошибке
WScript.Echo "При создании процесса NOTEPAD.EXE произошла ошибка"
Else
' Выводим на экран сообщение об удачном запуске если не нравится закоментируйте апострофом
WScript.Echo "Процесс NOTEPAD.EXE успешно запущен "
End If
'************************* Конец ***********************************
[/more]

Если процесс уже запущен и нужно изменить его приоритет то [more] '
' Язык: VBScript
' Описание: Изменение приоритета запущенного процесса
'
'*******************************************************************


Const cPriority = 256 'Та же самая константа что и в предыдущем сценарии

strComputer = "." 'Имя компьютера, для локального достаточно точки
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")

For Each objProcess In colProcesses
objProcess.SetPriority(cPriority)
'Закоментируйте если сообщение не нужно
WSH.Echo "Приоритет процесса notepad.exe = " & objProcess.Priority

Next
'Дальше можно закоментировать, если сообщение не нужно
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess In colProcesses
WSH.Echo "Приоритет процесса notepad.exe изменен = " & objProcess.Priority    
Next [/more]

Если есть какие нибуть еще задачи по написанию скриптов на vbs, постараюсь помочь по мере сил.
Автор: Bezzz
Дата сообщения: 02.12.2005 07:17

Цитата:
приоритет-то всего 4 значения имеет

На самом деле приоритетов 32 %)
По умолчанию всем приложениям, запущенным пользователями и администраторами, присваивается базовый приоритет 8 (нормальный). Хотя пользователи также могут запускать приложения с приоритетом 4 (низкий) и 13 (высокий), и только администраторы могут запускать приложения с приоритетом 24 (приоритет реального времени).
;)
Автор: bredonosec
Дата сообщения: 02.12.2005 09:35

Цитата:
На самом деле приоритетов 32 %)

Про Base priority & thread priority 8*4 я знаю. %) Разница в том, что назначаются обычно только 4 названных тобою - thread приоритеты.
Хочешь сказать, что такой способ позволяет менять оба варианта приоритетов?
//ЗЫ. насчет "только администраторы могут реал-тайм назначать" - это встроенными утилитами? Просто как на 98, так и на хр, насколько помню, игрался с процесс вьюером - назначается. Кроме кернел процесса (возможно еще кого-то, не со всеми проверял).

Uriu
пасиб, в копилку отложил
Автор: Bezzz
Дата сообщения: 02.12.2005 11:40

Цитата:
только 4 названных тобою

Назначаются процессам. Но каждый процесс может порождать так называемые потоки. И каждый поток может тоже иметь свой приоритет, но относительно приоритета процесса, которые его породил. Короче эти названные приоритеты называют базовыми (по докам их шесть) И именно их можно можно изменить с помощью диспетчера задач или вызовом SetPriorityClass.


Цитата:
только администраторы могут реал-тайм назначать

Любой утилитой запущеной от имени любого пользователя, входящего в группу администраторы (локальные)


Цитата:
на 98

98-й понятия не имеет, что такое администратор ;)


Цитата:
игрался с процесс вьюером - назначается

Ты сам разве не локальный администратор? %)


Цитата:
кернел процесса

Это шо за зверь? У мну есть тока процесс System %)
Вообще то kernel моде это режим выполнения ядра, в котором собственно и выполняет код самой операционной системы (системные сервисы, драйверы устройств)
Все остальное выполняется в пользовательском режиме (user mode)
Автор: bredonosec
Дата сообщения: 02.12.2005 13:58

Цитата:
Это шо за зверь?
процесс ядра на 98.

Цитата:
Ты сам разве не локальный администратор? %)
- Да, а вот с какого акка в ХР игрался - не помню, возможно, что и с админского..

Цитата:
SetPriorityClass
А в реестре такого значения нема? На 98 не нашел, интересно насчет ХР.
Просто по приоритету - ввел поиск Priority, нашел кучу ключей в разных ветках
навроде [more=ключей]

Код: [HKEY_CURRENT_USER\SOFTWARE\Microsoft\MSDAIPP\Providers\{9FECD570-B9D4-11d1-9C78-0000F875AC61}]
@="Microsoft Data Access Internet Publishing Provider DAV"
"Priority"=dword:08800000

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Multimedia\Audio Compression Manager\Priority v4.00]

[HKEY_CURRENT_USER\SOFTWARE\WinRAR\General]
"Priority"=dword:00000001

[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectPlayNATHelp\DPNHPAST]
"DirectPlay8Priority"=dword:00000002

[HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Transporter]
"Priority_FS"=dword:00000001
"Priority_Direct"=dword:00000003
"Priority_Internet"=dword:00000002
Автор: CocKain
Дата сообщения: 20.09.2006 22:25
Имеется служба, а именно Sygate Personal Firewall. Запускается автоматически. Трюк "cmd /c start /high "service"" не помогает — вообще не запускается. Ни с именем приложения, ни с полным путём, ни с полным путём к cmd.
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services "Group"" пока не пробовал. Опасаюсь, что имя этой группы имеет какое-то принципиальное значение для ОС. Если это не так, и можно спокойно задавать своё имя, то на каком уровне приоритета запускаются службы, относящиеся к первой группе? Real time или просто high? И куда в таком случае лучше приписать свою?
Автор: WRFan
Дата сообщения: 21.09.2006 03:00
bat file: start /BELOWNORMAL pathTo\filename.exe
Автор: Volchek
Дата сообщения: 25.12.2006 20:57

Цитата:
bat file: start /BELOWNORMAL pathTo\filename.exe

Ну этот способ то известен, но как то не верится, что задача решаемая примитивным батником не может быть решена более элегантно. Кроме того, есть куча сервисов, стартующих при загрузке и хотелось бы самому назначить чсти из них приоритеты, отличные от дефолтных. Вот я, например, хотел бы, чтобы сервис сервака Serv-U загружался с пониженны приоритетом, а Апрач, наоборот, с повышенным.
Вот ведь сколько существует твикеров, но ни в одном мне не попадались такие фичи. Почему бы??

Страницы: 1

Предыдущая тема: Windows NT4 инсталяция с винта


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.