![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
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
|
|||
|
|||
|
ну, ковыряться со службами, выяснять что от чего зависит, лень.
По поводу этой жуткой смеси. Уж либо общайся с 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
|
|||
|
|||
|
Зачем батниками балуешся? Делай так:
Код:
ShellExecute(0, 'open', 'net', 'stop wuauserv', '', SW_HIDE); ShellExecute(0, 'open', 'sc', 'config wuauserv start=disabled', '', SW_HIDE); |
|
#4
|
|||
|
|||
|
Цитата:
Все не так просто, я полагаю меня не понимают. Меж тем мой опыт и наблюдения говорят. Единожды отменив службу и забыв про это ничего не выйдет. Служба возобновляется. Как? А черт её знает. Именно поэтому нужен процесс, который постоянно висит и запрещает, запрещает, запрещает... И даже в этом случае, запрещенный процесс иногда запрашивает у меня, что он таки готов обновиться... Смотрю в службу, а она отключена... Вот так. |