我创建了一个新的 Windows 7 SP1 基础映像。一切都很顺利。
所以我现在正在安装标准应用程序
我希望 Quicktime 能够管理 .mov 文件。唯一的问题是 WMP (Windows Media Player) 不会放弃与 .mov 文件的关联。
这让我发疯了...我一直在阅读有关如何修复文件关联的帖子。
我想通过注册表、powershell 或 cmdline 来执行此操作。我不能使用 GPO
我尝试了以下方法:
assoc .mov=QuickTime.mov
ftype QuickTime.mov="%ProgramFiles(x86)\QuickTime\QuickTimePlayer.exe"
Reg add HKCU\Software\Microsoft\windows\CurrentVersion\Explorere\FileExts\.mov\UserChoice" /v Progid /d QuickTime.mov /f
Reg add HKCU\Software\Microsoft\windows\CurrentVersion\Explorere\FileExts\.mov\OpenWithList" /v a /d QuickTimePlayer.exe /f
Reg add "HKCU\Software\Microsoft\windows\CurrentVersion\Explorere\FileExts\.mov\OpenWithList" /v b /d wmplayer.exe /f
Reg add HKCU\Software\Microsoft\windows\CurrentVersion\Explorere\FileExts\.mov\OpenWithList" /v MRUList /d ab /f
Reg add HKCU\Software\Microsoft\windows\CurrentVersion\Explorere\FileExts\.mov\OpenWithProgids" /v Quicktime.mov /t REG_NONE /d 0000 /f
Reg add HKCU\Software\Microsoft\windows\CurrentVersion\Explorere\FileExts\.mov\OpenWithProgids" /v WMP11.AssocFile.MOV /t REG_NONE /d 0000 /f
答案1
首先,“assoc”命令会更改 HKEY_CLASSES_ROOT 中文件类型的一般关联。如果您在 regedit 中检查该条目,我预计您将看到能够成功更改它。如果 UserChoice 子键中已经设置了用户首选项,这将对您没有帮助,因为它具有优先权。我怀疑您已经知道这一点,这就是您尝试直接更改其他注册表项的原因。
我注意到的下一件事是密钥路径中的错误。您使用的是“Explorere”而不是“Explorer”。这可能意味着当您尝试更改密钥时没有收到任何错误消息。如果您正在创建一个新的未使用的密钥,那么它将不会对文件的行为产生任何影响。
接下来,您似乎在询问如何更改密钥,但似乎并不担心方法(只要它是脚本化的),所以我只尝试了一个:powershell。每次我尝试写入 UserChoice 时都会引发安全异常,但对于其他密钥则不会。问题似乎是这个特定注册表项的访问权限。当我在 powershell 中读出 acl 时,我可以看到我的帐户的注册表访问规则将“SetValue”设置为“Deny”。
下列页很好地描述了如何解决此问题并删除所需的权限。以下是在我的 Win7 PC 上运行的结果脚本。我使用 .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”命令应该可以解决问题。
答案2
尝试默认程序编辑器。进入文件类型设置,选择.mov
文件,然后将Open
项目更改为 Quicktime。
然后,您可以将更改保存为 .reg 文件以进行检查/应用/保存/部署。