Обновлен скрипт. Проверено, работает и не вызывает диалоговое окно разрешения.
Невозможно запретить Windows создавать desktop.ini, потому что на самом деле это не Windows. Некоторый другой сторонний сервис инициирует создание этого файла, и, разумеется, Windows разрешает это, несмотря на UseDesktopIniCache = 0.
Desktop.ini сводил меня с ума, поэтому я нашел решение для разношерстных. Я заметил, что файл desktop.ini создается через несколько секунд после загрузки. Я воспользовался этим. Используя планировщик заданий, я временно отключаю разрешение на запись на рабочем столе при загрузке. Это мешает сторонним службам выполнять махинации с моим рабочим столом. Затем, через одну минуту после загрузки, другая задача восстанавливает разрешение на запись на рабочем столе.
Здесь я поделился набором образцов XML-файлов, которые планировщик задач может выполнить.
Эта версия скрипта отключает наследование
Я нашел наследование слишком запутанным, поэтому отключил его для папки Desktop. Вы можете добавить / наследование: где-то во втором скрипте, если вам это действительно нужно, но учтите, что отключение наследования - процесс с потерями, поэтому добавление этой строки не изменит все обратно на прежнее место. Рабочий стол не является системной папкой, поэтому он не должен влиять на вас.
Это для отключения разрешения записи при загрузке:
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2018-01-09T18:21:14.9818893</Date> <Author>spero_LAPTOP\spero</Author> <URI>\Desktop Write Permission disable</URI> </RegistrationInfo> <Triggers> <LogonTrigger> <ExecutionTimeLimit>PT1M</ExecutionTimeLimit> <Enabled>true</Enabled> </LogonTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>##################################</UserId> <LogonType>Password</LogonType> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>true</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>PT1M</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /inheritance:d /remove "SYSTEM"</Arguments> </Exec> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /remove "Administrators"</Arguments> </Exec> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /remove "spero"</Arguments> </Exec> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /grant "Administrators":(OI)(GR)</Arguments> </Exec> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /grant "spero":(OI)(GR)</Arguments> </Exec> </Actions> </Task>
Это для восстановления разрешения минуту спустя:
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2018-01-09T18:19:03.2968461</Date> <Author>spero_LAPTOP\spero</Author> <URI>\Desktop Write Permission</URI> </RegistrationInfo> <Triggers> <LogonTrigger> <ExecutionTimeLimit>PT1M</ExecutionTimeLimit> <Enabled>true</Enabled> <UserId>spero_LAPTOP\spero</UserId> <Delay>PT1M</Delay> </LogonTrigger> </Triggers> <Principals> <Principal id="Author"> <UserId>######################################</UserId> <LogonType>Password</LogonType> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>true</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>PT1M</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /grant "Administrators":F</Arguments> </Exec> <Exec> <Command>ICACLS</Command> <Arguments>"C:\Users\spero\Desktop" /grant "spero":F</Arguments> </Exec> </Actions> </Task>
Обратите внимание, что мой загрузочный диск - SSD, хотя и не очень быстрый. Время может варьироваться в зависимости от того, как быстро загружается ваша ОС.
Кроме того, вы не можете импортировать эти сценарии напрямую из-за наличия полей Author и User ID. Просто запомните все параметры.