对于工作,我们有两个安装到开始菜单的快捷方式,它们都指向同一个 exe(但第二个具有不同的命令行参数)。
有时windows会选择第二个快捷方式显示在开始菜单热程序列表中,这很糟糕,因为它会导致应用程序的完全更新。
有没有办法告诉 Windows 不要在开始菜单列表中显示该快捷方式?
是的,事实上 Raymond Chen刚刚写过这个:
您可以将
System.AppUserModel.ExcludeFromShowInNewInstall
属性设置VARIANT_TRUE
为告诉开始菜单,“我不是程序的主要入口点;我是辅助快捷方式,就像帮助文件一样。”
示例代码(CCoInitialize
类):
#include <windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <atlbase.h>
// class 3CCoInitialize incorporated here by reference
int __cdecl _tmain(int argc, TCHAR **argv)
{
// error checking elided for expository purposes
CCoInitialize init;
CComPtr<IShellLink> spsl;
spsl.CoCreateInstance(CLSID_ShellLink);
spsl->SetPath(TEXT("C:\\Program Files\\LitWare\\LWUpdate.exe"));
PROPVARIANT pvar;
pvar.vt = VT_BOOL;
pvar.boolVal = VARIANT_TRUE;
CComQIPtr<IPropertyStore>(spsl)->SetValue(PKEY_AppUserModel_ExcludeFromShowInNewInstall, pvar);
CComQIPtr<IPersistFile>(spsl)->Save(L"LitWare Update.lnk", TRUE);
return 0;
}
您可以在此处找到这些设置的文档:Application User Model IDs (AppUserModelIDs)。具体来说,您正在寻找标题为“任务栏固定和最近/频繁列表的排除列表”的部分。适用部分转载如下:
应用程序、进程和窗口可以选择使自己无法固定到任务栏或包含在“开始”菜单的 MFU 列表中。有三种机制可以做到这一点:
将
NoStartPage
条目添加到应用程序的注册中,如下所示:HKEY_CLASSES_ROOT\Applications\Example.exe\NoStartPage
与条目关联的数据将
NoStartPage
被忽略。只有条目的存在是必需的。因此, 的理想类型NoStartPage
是REG_NONE
。请注意,任何显式 AppUserModelID 的使用都会覆盖该
NoStartPage
条目。如果将显式 AppUserModelID 应用于快捷方式、进程或窗口,它就会变为可固定并符合“开始”菜单 MFU 列表的条件。
System.AppUserModel.PreventPinning
在窗口和快捷方式上设置属性。此属性必须在PKEY_AppUserModel_ID
属性之前设置在窗口上。在以下注册表子项下添加显式
AppUserModelID
作为值,如下所示:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\NoStartPageAppUserModelIDs\AppUserModelID
每个条目都是一个
REG_NULL
带有 AppUserModelID 名称的值。在此列表中找到的任何 AppUserModelID 均不可固定,也不符合包含在“开始”菜单 MFU 列表中的条件。