How to prevent an app from being pinned in Windows 7?

前端 未结 3 941
逝去的感伤
逝去的感伤 2021-02-10 03:48

I am trying to prevent the user from pinning my .NET app to the taskbar. I\'ve found some code on the Old New Thing that does just that. However, it is in C++.



        
3条回答
  •  别那么骄傲
    2021-02-10 04:34

    In the question, the Old New Thing post also talks about how you can set some registry settings on per application basis that will so prevent the pinning an application to the taskbar.

    All you have to do is add the value of "NoStartPage" to a key for your application under the Root\Applications. The value can be blank and of any type, if Windows just sees it is there it will not show the ability to pin the app, when the user right clicks on it in the taskbar.

    Here is the documentation from Microsoft on this feature: Use Registry to prevent pinning of an application

    The one caveat to this is that in Windows 7, due to UAC, you have to run as administrator to update the registry. I did this via the app.manifest.

    The code to find the right and update the correct registry keys is below (hopefully it is not too verbose):

    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);                    
                }
            }
        }
    

提交回复
热议问题