0

对于工作,我们有两个安装到开始菜单的快捷方式,它们都指向同一个 exe(但第二个具有不同的命令行参数)。

有时windows会选择第二个快捷方式显示在开始菜单热程序列表中,这很糟糕,因为它会导致应用程序的完全更新。

有没有办法告诉 Windows 不要在开始菜单列表中显示该快捷方式?

4

2 回答 2

4

是的,事实上 Raymond Chen刚刚写过这个

您可以将System.App­User­Model.Exclude­From­Show­In­New­Install属性设置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;
}
于 2011-02-17T05:20:41.410 回答
2

您可以在此处找到这些设置的文档:Application User Model IDs (AppUserModelIDs)。具体来说,您正在寻找标题为“任务栏固定和最近/频繁列表的排除列表”的部分。适用部分转载如下:

应用程序、进程和窗口可以选择使自己无法固定到任务栏或包含在“开始”菜单的 MFU 列表中。有三种机制可以做到这一点:

  1. NoStartPage条目添加到应用程序的注册中,如下所示:

    HKEY_CLASSES_ROOT\Applications\Example.exe\NoStartPage
    

    与条目关联的数据将NoStartPage被忽略。只有条目的存在是必需的。因此, 的理想类型NoStartPageREG_NONE

    请注意,任何显式 AppUserModelID 的使用都会覆盖该NoStartPage条目。如果将显式 AppUserModelID 应用于快捷方式、进程或窗口,它就会变为可固定并符合“开始”菜单 MFU 列表的条件。

  2. System.AppUserModel.PreventPinning在窗口和快捷方式上设置属性。此属性必须在PKEY_AppUserModel_ID属性之前设置在窗口上。

  3. 在以下注册表子项下添加显式AppUserModelID作为值,如下所示:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\NoStartPageAppUserModelIDs\AppUserModelID
    

每个条目都是一个REG_NULL带有 AppUserModelID 名称的值。在此列表中找到的任何 AppUserModelID 均不可固定,也不符合包含在“开始”菜单 MFU 列表中的条件。

于 2011-02-17T05:15:08.277 回答