Во-первых, команда "assoc" изменяет общую ассоциацию типа файла в HKEY_CLASSES_ROOT. Если вы проверите запись в regedit, я ожидаю, что вы увидите, что вы можете успешно изменить ее. Это не поможет, если в подразделе UserChoice уже заданы пользовательские настройки, поскольку они имеют приоритет. Я подозреваю, что вы уже знаете это, и именно поэтому вы пытаетесь изменить другие ключи реестра напрямую.
Следующим пунктом, который я заметил, была ошибка в пути к ключу. Вы используете "Исследовать" вместо "Проводник". Это, вероятно, означает, что вы не получаете сообщение об ошибке при попытке изменить ключ. Если вы создаете новый неиспользуемый ключ, это не повлияет на поведение файла.
Затем вы, похоже, спрашивали о том, как изменить ключ, но, похоже, не беспокоились о методе (если он написан на скрипте), поэтому я просто попробовал один: powershell. Исключение безопасности возникает каждый раз, когда я пытаюсь написать UserChoice, но не для других ключей. Проблема заключается в правах доступа для этого конкретного раздела реестра. Когда я прочитал acl в powershell, я увидел, что правило доступа к реестру для моей учетной записи имеет "SetValue" как "Запретить".
На следующей странице приведено отличное описание того, как обойти эту проблему и удалить необходимые разрешения. Вот результирующий скрипт, который работал для меня на моем ПК с Win7. Я проверил, используя файл .mov; скрипт успешно изменил программу, которая была вызвана при двойном щелчке файла.
$user=<your user account name>
$name = "Software\Microsoft\windows\CurrentVersion\Explorer\FileExts\.mov\UserChoice"
$RegKey ="HKCU:\" + $name
Get-ItemProperty -path $RegKey
get-acl -path $RegKey
$key = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey($name, [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,
[System.Security.AccessControl.RegistryRights]::ChangePermissions)
$acl = $key.GetAccessControl()
$rule=new-object System.Security.AccessControl.RegistryAccessRule ($user, 'SetValue', 'Deny')
$acl.RemoveAccessRule($rule)
$key.SetAccessControl($acl)
get-acl -path $RegKey
Set-ItemProperty -path $RegKey -name Progid -value 'WMP11.AssocFile.MOV' -type String
Get-ItemProperty -path $RegKey
Если есть какие-либо дальнейшие ошибки, то я предлагаю вам сравнить разрешения ACL. Скрипт распечатывает acl до и после, а также текущее содержимое ключа.
Примечания 1. Отображаемый значок может не обновляться. Дважды щелкните файл .mov для проверки. 2. Если есть проблемы, попробуйте убедиться, что вы можете изменить значение вручную и увидеть эквивалентное изменение в regedit.
Обновление: я предполагал, что вы хотите сохранить пользовательские настройки, но прочитав ваше описание во второй раз, я понял, что вы не указали это. Если вы хотите изменить связь для всех пользователей, вам придется полностью удалить ключ UserChoice с помощью относительно простой команды, подобной этой. Тогда ваша команда "Assoc" должна сделать свое дело.