Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.11.2017, 01:00
Kek Kek вне форума
Прохожий
 
Регистрация: 21.11.2010
Адрес: Москва
Сообщения: 17
Репутация: 10
По умолчанию Windows 10. Запрет службы обновления

Windows 10 Home Edition - лицензионная
Asus ROG GL752VW Series Notebook

Обновления Windows приводят к тому, что не лицензионные приложения со временем перестают работать. И это факт. И не только это печалит, а и вовсе черт знает что происходит.
Запрет службы «Центр обновления Windows» приводит к некоторому успокоению, но только на время. После перезагрузки или выхода из гибернации служба из состояния disabled переходит в ручной режим. Причина в том, что эта служба связана с другими службами, а отключать всю цепочку не хочется, это приведет к непоняткам.
Все советы в инете через реестр и прочие решения относятся к версии PRO, поэтому не интересны.
Как быть?

Вот программа, запускается без формы, висит в списке «Фоновые процессы» под именем «sc_disabled.exe». Что она делает? Через определенное время, которое задается как параметр, по умолчанию 2 секунды, выполняет пакетный файл sc_disabled.bat и все... Служба принудительно раз в 2 секунды становится disabled. Память не жрет 1.5 Мб, ресурсы тоже.
Для Win7 тоже подойдет. Выключить программу можно только через Диспетчер задач, так как она циклическая. А запустить ее можно либо вручную, либо через папку «Автозагрузка».

Код:
program sc_disabled;

uses

Windows, SysUtils, ShellApi;

var AppPath:string;
    Handle:THandle;
    Msg: TMsg;
    Interval:integer;
    st:string;
    code:integer;
    pri:integer;

procedure sysTimerProc(Wnd: HWND; uMsg,idEvent,dwTimer: UINT); pascal;
begin
 ShellExecute(Handle, nil, 'sc_disabled.bat', nil, PChar(AppPath), SW_HIDE);
end;

begin

 st:=LowerCase(ParamStr(1));
 Val(st,pri,code);
 if code=0 then Interval:=pri else Interval:=2000;
 if Interval<1000 then Interval:=1000;
 AppPath := AnsiUpperCase(ExtractFilePath(ParamStr(0)));

 SetTimer(0,0,Interval,@sysTimerProc);
 while (GetMessage(Msg,0,0,0)) do DispatchMessage(Msg);

 KillTimer(0,0);// до сюда не доходим

end.

Содержания файла "sc_disabled.bat ":

sc config wuauserv start= disabled

Программу sc_disabled.exe конечно нужно наделить правами:
Свойства+Совместимость+Выполнять эту программу от имени администратора

Почему программа запускает bat файл, а не сам bat является конечным звеном? Потому что я не знаю как сделать пакетный файл навсегда от имени администратора и не знаю как сделать в пакетном файле непрерывный таймер.
Если кто короче придумает, тот и молодец, а если кто скажет какие службы надо отключить навсегда в цепочке тот вообще гуру.
С другой стороны этот код можно вообще и к другим службам прицепить.
Я все сказал.

Последний раз редактировалось Kek, 04.11.2017 в 01:04.
Ответить с цитированием
  #2  
Старый 04.11.2017, 05:23
Аватар для lmikle
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,982
Репутация: 49086
По умолчанию

ну, ковыряться со службами, выяснять что от чего зависит, лень.
По поводу этой жуткой смеси.
Уж либо общайся с service Manager из своего сервиса, либо посади свой батник на Scheduler.
Код:
procedure DisableService(ServiceName: PChar);
var SM: TServiceManager;
begin
  SM:=TServiceManager.Create;
   try
     SM.Connect;
     SM.OpenServiceConnection(ServiceName);

   //not working with TServiceManager as is
   //but its easy to fix, see below        
    SM.DisableService;


   finally
    SM.Free;
   end;
end;
Ну а с планировщиком сам разберешься...
Ответить с цитированием
  #3  
Старый 08.12.2017, 17:03
pirsddd pirsddd вне форума
Прохожий
 
Регистрация: 01.04.2011
Адрес: Харьков
Сообщения: 31
Версия Delphi: 7 mini
Репутация: 10
По умолчанию

Зачем батниками балуешся? Делай так:
Код:
ShellExecute(0, 'open', 'net', 'stop wuauserv', '', SW_HIDE);
ShellExecute(0, 'open', 'sc', 'config wuauserv start=disabled', '', SW_HIDE);
Приложения скорее не работают из-за антивируса, их надо в исключения добавлять. Остановив службу wuauserv обновления всё равно пройдут другими службами. Запретить полностью обновления можно только огненной стеной, рекомендую TinyWall.
Ответить с цитированием
  #4  
Старый 08.12.2017, 22:38
Kek Kek вне форума
Прохожий
 
Регистрация: 21.11.2010
Адрес: Москва
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от pirsddd
Зачем батниками балуешся? Делай так:
Код:
ShellExecute(0, 'open', 'net', 'stop wuauserv', '', SW_HIDE);
ShellExecute(0, 'open', 'sc', 'config wuauserv start=disabled', '', SW_HIDE);
Приложения скорее не работают из-за антивируса, их надо в исключения добавлять. Остановив службу wuauserv обновления всё равно пройдут другими службами. Запретить полностью обновления можно только огненной стеной, рекомендую TinyWall.

Все не так просто, я полагаю меня не понимают. Меж тем мой опыт и наблюдения говорят. Единожды отменив службу и забыв про это ничего не выйдет. Служба возобновляется. Как? А черт её знает. Именно поэтому нужен процесс, который постоянно висит и запрещает, запрещает, запрещает... И даже в этом случае, запрещенный процесс иногда запрашивает у меня, что он таки готов обновиться... Смотрю в службу, а она отключена... Вот так.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter