对于工作,我们有两个安装到开始菜单的快捷方式,它们都指向同一个exe(但第二个具有不同的命令行参数)。
有时候,Windows会选择第二个快捷方式显示在开始菜单热门程序列表中,这是不好的,因为它会导致应用程序的完全更新。
有没有办法告诉Windows不要在开始菜单列表中显示该快捷方式?
答案 0 :(得分:4)
是的,事实上Raymond Chen just wrote about this:
您可以将
System.AppUserModel.ExcludeFromShowInNewInstall
property设置为VARIANT_TRUE
以告诉“开始”菜单,“我不是该程序的主要入口点;我是辅助快捷方式,如帮助文件。”< / p>
示例代码(CCoInitialize
class):
#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;
}
答案 1 :(得分:2)
您可以在此处找到这些设置的文档:Application User Model IDs (AppUserModelIDs)。具体来说,您正在寻找名为“任务栏固定和最近/常用列表的排除列表”的部分。适用部分转载如下:
应用程序,进程和窗口可以选择使其自身不可用于固定到任务栏或包含在“开始”菜单的MFU列表中。有三种机制可以实现这一目标:
将
NoStartPage
条目添加到应用程序的注册中,如下所示:HKEY_CLASSES_ROOT\Applications\Example.exe\NoStartPage
忽略与
NoStartPage
条目关联的数据。只需要存在条目。因此,NoStartPage
的理想类型为REG_NONE
。请注意,使用显式AppUserModelID会覆盖
NoStartPage
条目。如果将明确的AppUserModelID应用于快捷方式,进程或窗口,它将变为pinnable并且符合“开始”菜单MFU列表的条件。在Windows和快捷方式上设置
System.AppUserModel.PreventPinning
属性。必须在PKEY_AppUserModel_ID
属性之前的窗口上设置此属性。- 醇>
在以下注册表子项下添加显式
AppUserModelID
作为值,如下所示:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\NoStartPageAppUserModelIDs\AppUserModelID
每个条目都是
REG_NULL
值,其名称为AppUserModelID。此列表中找到的任何AppUserModelID都不可以固定,也不符合包含在“开始”菜单MFU列表中的条件。