我正在尝试开发自己的Boxstarter脚本来启动新机器。我刚刚意识到,我真的想添加一行代码来更改默认应用程序以打开特定的文件类型。例如,我想用Notepad++打开.txt文件。我知道如何通过右键单击该文件并检查其属性来完成此操作,但是有没有一行代码可以添加到我的Boxstarter脚本中呢?或者,由于Boxstarter基本上是一组特殊的PowerShell命令,有没有可以直接调用的PowerShell命令来更改opens with属性?我做了一些搜索,大多数结果都是关于如何让PowerShell打开一些东西,而不是改变opens with属性。剩下的都是关于如何打开PowerShell的。
发布于 2014-03-15 20:30:58
另一种类似但不完全相同的方法是更改您想要与特定应用程序关联的文件关联。Chocolatey包含一些辅助命令来执行此操作,因此可用于您的Boxstarter包。下面是我的一个Boxstarter包的摘录:
Install-ChocolateyFileAssociation ".txt" "$env:programfiles\Sublime Text 2\sublime_text.exe"
Install-ChocolateyFileAssociation ".dll" "$($Boxstarter.programFiles86)\jetbrains\dotpeek\v1.1\Bin\dotpeek32.exe"所以现在双击任何文本文件都会打开sublime,或者任何dll都会打开dotpeek。
但我同意。能够添加到"Open With...“中仍然很有帮助。列表。
发布于 2014-03-11 09:53:49
感谢@Raf为我指明了正确的方向。下面是更改.txt文件的OpensWith属性的代码:
$principal = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$key = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions)
$acl = $key.GetAccessControl()
$right = "SetValue"
$denyrule = New-Object System.Security.AccessControl.RegistryAccessRule($principal,$right,"DENY")
$ret = $acl.RemoveAccessRule($denyrule)
$ret = $key.SetAccessControl($acl)
Set-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice -Name ProgId -Value Applications\notepad++.exe对TechNet论坛中的answer稍作修改。
我还不知道是否有boxstarter的快捷方式,但更改ACL规则是关键。如果没有它,您就没有适当的访问权限来更改此特定注册表项。即使我尝试以管理员身份运行Requested registry access is not allowed.,并确保我对Powershell密钥具有所有正确的权限(管理员帐户和我的用户帐户都具有完全控制权限),但我仍然收到以下错误消息:
https://stackoverflow.com/questions/22253321
复制相似问题