Windows 7: Task Scheduler / Engine уменьшает рабочий набор / память приложений, есть ли способ остановить это?

385
RedLetter

Я пытался автоматически запускать некоторые сценарии Auto-HotKey с помощью планировщика задач, поскольку он позволяет сценариям запускаться с правами администратора без запроса UAC.

Обычно скрипты выходят из строя через несколько часов. При запуске через папку UAC / explorer.exe / startup все эти сценарии выполнялись в течение нескольких дней. (Единственное, что я видел, надежно работает через планировщик задач, это простое, которое выскакивает окно сообщения «Hello World».)

Используя Process Explorer, я заметил, что у дочерних процессов taskeng.exe всегда были уменьшены размеры их рабочих наборов (с ~ 3000 К до 512 КБ или около того), в то время как дочерние процессы UAC / explorer.exe оставались постоянными.

Я попытался с помощью некоторого кода AHK проверить, может ли он изменить размер рабочего набора:

pid := DllCall("GetCurrentProcessId") handle := DllCall("OpenProcess", "UInt", 0x001F0FFF, "Int", 0, "Int", pid) DllCall("SetProcessWorkingSetSize", "UInt", handle, "Int", 10000000, "Int", 20000000) DllCall("CloseHandle", "Int", handle) 

Это не похоже на буксировку, так что я не уверен, что есть какая-то проблема.


Решением было скомпилировать исполняемый файл как 64-битный, а не 32-битный. Я не пробовал это раньше, потому что 32-битная версия работала отлично через папку «Автозагрузка» в течение месяцев, которые я использовал.

Я полагаю, что проблема возникла из-за того, что клавиатура-хук загружалась в память, а затем выгружалась во время сбора мусора. Были затронуты только горячие клавиши, назначенные для подключения к клавиатуре, но не назначенные с помощью RegisterHotkey.

Я использую 64-битные исполняемые файлы уже более недели, и ни один из них не вышел из строя, хотя некоторые из них реагировали немного медленно (возможно, что-то было связано с фоновыми процессами или поглощением ресурсов Chrome). Устранение или перезапуск родительских процессов taskeng.exe и svchost может решить эту проблему, так как это был единственный способ остановить перераспределение рабочего набора (все еще не удалось решить 32-разрядную проблему, и уничтожение родительского svchost создало некоторые новые проблемы). ).

[2018-10-03 Обновление: Я в основном решил проблему.] Task Scheduler может устанавливать задачи для выполнения с различными приоритетами, но пользовательский интерфейс не показывает это.

Чтобы изменить приоритет:

  1. Экспортируйте задачу как файл XML.
  2. Отредактируйте файл XML и измените тег Приоритет. Смотрите эту страницу для списка приоритетов.
  3. Установите для StopOnIdleEnd значение «false». (Не проверял это, но это могло вызывать отставание мыши / ввода.)
  4. Импортируйте измененный файл XML как задачу, и она должна работать.

Повышение приоритета таким образом также увеличивает память и приоритет ввода / вывода.

Компиляция AHK-скриптов как 64-битных может потребоваться.

2
Я также использую Task Scheduler для запуска AutoHotkey при запуске и сталкиваюсь с той же проблемой. Я также заметил, что это происходит, когда я запускаю его вручную. Не уверен почему. В качестве обходного пути я добавил ярлык запуска от имени администратора в меню «Пуск» и запускаю его оттуда каждый раз, когда происходит сбой. VarunAgw 6 лет назад 0
Что странно, так это то, что я много месяцев без проблем запускал большой / сложный, многоключевой скрипт (через меню «Пуск» без прав администратора). Он работал отлично, но теперь у него проблемы с поддержанием сочетаний клавиш. Либо я запускаю слишком много сценариев, повышение прав администратора вызывает проблемы, либо блокировка моей учетной записи вызывает это. RedLetter 6 лет назад 0
Забыл добавить, что я также запускаю через ярлык администратора (с помощью средства запуска сценариев для уменьшения кликов), и все еще есть те проблемы, о которых я упоминал. Я думаю, что блокировка экрана на самом деле может быть проблемой, но я все еще тестирую ее (это не было проблемой, когда я запускал через папку «Автозагрузка»). RedLetter 6 лет назад 0
Блокировка экрана не проблема (по крайней мере, для меня это происходит в случайное время во время работы). Мой скрипт AHK имеет длину 2K строки. Обнаружение проблемы в этом походит на нахождение иглы в esp стога сена, так как это случается очень редко. Если вы действительно хотите, вы можете попробовать разбить его на небольшие скрипты и посмотреть, какая часть падает VarunAgw 6 лет назад 0
Также см. [Это] (https://autohotkey.com/boards/viewtopic.php?f=14&t=44268&p=200646#p200646). Может быть, это поможет вам. VarunAgw 6 лет назад 0
Кажется, я обнаружил, что мне нужна директива #Persistent в моих скриптах. Тестирование прямо сейчас показывает скачок рабочего набора по размеру при нажатии горячей клавиши. Я должен знать завтра, когда мои сценарии работают много часов. RedLetter 6 лет назад 0
Говорил слишком рано. Это не удалось в течение часа или около того. RedLetter 6 лет назад 0
Хорошо, я понял, что мой сценарий не сработал, горячие клавиши были. По какой-то причине горячие клавиши перезаписывают системные горячие клавиши по умолчанию, если они запускаются в планировщике заданий. (Вот почему некоторые из моих сценариев работали, они не перезаписывали другую горячую клавишу.) Разделение сценария на две части и использование WinWait для связи не означает сбоя. Но он потребляет 4-8% процессорного времени, поэтому я все еще собираюсь немного поэкспериментировать и попробовать другие способы обойти это. RedLetter 6 лет назад 0
Зачем ты все это делаешь? Я думал, что твой autohotkey рушится для тебя. Поворот клавиш Win + X + запуск ahk от имени администратора, вероятно, решит проблему за вас https://www.askvg.com/tip-how-to-disable-all-win-keyboard-shortcuts-hotkeys-in-windows/ VarunAgw 6 лет назад 0
Я понял, что должен был скомпилировать исполняемый файл как 64-битный. Я не думал пробовать это раньше, потому что 32-битный исполняемый файл работал нормально при запуске из папки «Автозагрузка». Тем не менее, возможно, придется выяснить, как настроить приоритет памяти для лучшей отзывчивости. RedLetter 6 лет назад 0

0 ответов на вопрос