在这个问题中,Old New Thing 帖子还讨论了如何在每个应用程序的基础上设置一些注册表设置,从而防止将应用程序固定到任务栏。
您所要做的就是将“NoStartPage”的值添加到 Root\Applications 下您的应用程序的键中。该值可以是空白的,并且可以是任何类型,如果 Windows 只是看到它在那里,当用户在任务栏中右键单击它时,它不会显示固定应用程序的能力。
以下是 Microsoft 关于此功能的文档:使用注册表防止应用程序被固定
需要注意的是,在 Windows 7 中,由于 UAC,您必须以管理员身份运行才能更新注册表。我通过 app.manifest 做到了这一点。
查找正确并更新正确注册表项的代码如下(希望它不会太冗长):
public static void Main(string[] args)
{
// Get Root
var root = Registry.ClassesRoot;
// Get the Applications key
var applicationsSubKey = root.OpenSubKey("Applications", true);
if (applicationsSubKey != null)
{
bool updateNoStartPageKey = false;
// Check to see if your application already has a key created in the Applications key
var appNameSubKey = applicationsSubKey.OpenSubKey("MyAppName.exe", true);
if (appNameSubKey != null)
{
// Check to see if the NoStartPage value has already been created
if (!appNameSubKey.GetValueNames().Contains("NoStartPage"))
{
updateNoStartPageKey = true;
}
}
else
{
// create key for your application in the Applications key under Root
appNameSubKey = applicationsSubKey.CreateSubKey("MyAppName.exe", RegistryKeyPermissionCheck.Default);
if (appNameSubKey != null)
{
updateNoStartPageKey = true;
}
}
if (updateNoStartPageKey)
{
// Create/update the value for NoStartPage so Windows will prevent the app from being pinned.
appNameSubKey.SetValue("NoStartPage", string.Empty, RegistryValueKind.String);
}
}
}