固定到任务栏的方法:在1903年再次损坏

时间:2019-10-24 08:28:20

标签: powershell windows-10

我已成功使用此小技巧以编程方式在Windows 10中使用PinToTaskbar。

$workingTarget = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\WordPad.lnk'

$lmPropertyValue =  '{90AA3A4E-1CBA-4233-B8BB-535773D48449}'
$userClassKeys = (Get-Item 'HKCU:\SOFTWARE\Classes').OpenSubKey('*', $true)
$shellKey = $userClassKeys.CreateSubKey('shell', $true)
$verbKey = $shellKey.CreateSubKey('PxToolsWin10PinToTaskbar', $true)
$verbKey.SetValue('ExplorerCommandHandler', $lmPropertyValue)

$shell = New-Object -ComObject "Shell.Application"
$folder = $Shell.Namespace((Get-Item $workingTarget).DirectoryName)
$item = $folder.ParseName((Get-Item $workingTarget).Name)
$item.InvokeVerb("PxToolsWin10PinToTaskbar")


# Remove the temporary shell and verb keys
Remove-Item -path:'HKCU:\SOFTWARE\Classes\*\shell\PxToolsWin10PinToTaskbar' -recurse -force

直到1903年更新之前,它一直运行良好。我已经验证了GUID并没有更改,它仍然引用pinToTaskbar,所以不确定Microsoft做了什么更改,但是希望有人对如何在最新版本中实现这一建议提出建议。

就其价值而言,我确实知道微软似乎认为办公室的IT不能做到这一点,或者更正确的是开发人员不应该这样做,并且微软笨拙的解决方案ALSO阻碍了可靠的IT。我发现这很有趣,因为当非本地管理员用户登录时,Microsoft并未阻止Autodesk将其放置在All User桌面上,在我看来,这是更多用户敌视行为。我的目标是固定到USER的任务栏,以提醒他们注意新软件,同时允许他们管理那些固定的项目,使其在初始固定后即可使用。微软的正确答案将是一种组策略,在该策略中,我可以专门启用某些程序以允许这样做,而其他所有程序均被阻止。但是据我所知,这仍然不是一个选择,因此我一直在寻找怪异的解决方法来维护所需的功能。 :(

1 个答案:

答案 0 :(得分:0)

基本上是因为IContextMenu::InvokeCommand实现检查呼叫者是否为explorer.exe。人们已经使用PEB操作来解决此问题,但这非常复杂。

我最近观察到Microsoft Edge(Chromium)如何以编程方式固定到任务栏。这是我的blog entry

重要。获得此知识的任何人都不应在未经积极明确的同意的情况下,将您编写的程序固定给用户。

但是让我们回到OP的真实问题。如果您只想在域中播发新程序,则应使用组策略。每当时间戳记向前时,都会重新应用布局XML。您可以编辑文件,以便它 only appends new pins

当非本地管理员用户登录时,Microsoft并未阻止Autodesk将其放置在All User桌面上

不确定这是什么OP。默认情况下,如果程序没有管理员权限,则无法编辑Public Desktop。

如果OP表示每次运行Autodesk时,它将检查并放置在Public Desktop上,这表示它已在安装时安装了为此服务的服务。请注意,该服务很可能是Windows Installer服务---任何用户都可以对存储到受信任位置的程序包执行修复,Windows Installer服务将以TrsutedInstaller的身份进行修复。请注意,这不是安全漏洞,因为首先将软件包放在受信任的位置需要管理员特权。