Оновлений сценарій. Перевірено працює та не запускає діалогове вікно дозволу.
Не можна завадити Windows створити desktop.ini, оскільки це насправді не Windows. Деякі інші сторонні сервіси ініціюють створення цього файлу, і очевидно, що Windows дозволяє це, незважаючи на UseDesktopIniCache = 0.
Desktop.ini зводив мене з розуму, тому я придумав рішуче рішення. Я помітив, що файл desktop.ini створюється через кілька секунд після завантаження. Я цим скористався. Використовуючи Планувальник завдань, я тимчасово відключаю дозвіл на запис на робочому столі під час завантаження. Це не дозволяє стороннім службам виконувати шнанігани на моєму робочому столі. Потім через хвилину після завантаження ще одне завдання відновлює дозвіл на запис на Desktop.
Тут я поділився набором зразкових файлів XML, щоб планувальник завдань виконав цю роботу.
Ця версія сценарію вимикає спадщину
Я визнав спадщину занадто заплутаною, тому відключив її для папки Desktop. Ви можете додати / успадкування: e десь у другому сценарії, якщо він вам справді потрібен, але зауважте, що відключення спадкування є програшним програванням, тому додавання цього рядка не змінить усе, де було раніше. Робочий стіл не є системною папкою, тому він не повинен впливати на вас незалежно.
Цей спосіб відключення дозволу на запис під час завантаження:
<?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>
<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, хоча і не дуже швидкий. Терміни можуть відрізнятися залежно від швидкості завантаження ОС.
Крім того, ви не можете імпортувати ці сценарії безпосередньо через наявність полів автора та ідентифікатора користувача. Просто врахуйте всі параметри.
UseDesktopIniCache=0
(з відповіді на superuser.com/a/650431/523828 ) не працює в Windows 10?