Member 13033417 Ответов: 1

Скрыть контекстное меню при выборе папки в commonopenfiledialog C#


Мне нужно скрыть/отключить контекстное меню при открытии CommonOpenFileDialog и выбранной папки.Я не хочу, чтобы пользователь выполнял какие-либо операции удаления.
Я уже пробовал реестр

Что я уже пробовал:

 CommonOpenFileDialog dialog = new CommonOpenFileDialog();
                //RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"Directory\Background\shellex\ContextMenuHandlers\New", true);

                ////Set it to blank.
                //key.SetValue("", "");
                dialog.IsFolderPicker = true;
                //FileSecurity fSecurity = File.GetAccessControl(@"C:\TnTFiles\");

                //AuthorizationRuleCollection rules = fSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
                //foreach (AuthorizationRule rule in rules)
                //{
                //    System.Security.Principal.NTAccount account =
                //        (System.Security.Principal.NTAccount)rule.IdentityReference.Translate(typeof(System.Security.Principal.NTAccount));
                //    //if (account.Value != "BUILTIN\\Administrators")
                //    //{
                //    fSecurity.AddAccessRule(new FileSystemAccessRule(account.Value, FileSystemRights.Delete, AccessControlType.Deny));
                //    //}
                //}

                //File.SetAccessControl(@"C:\TnTFiles\", fSecurity);
                RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"Directory\Background\shellex\ContextMenuHandlers", true);

                //Set it to blank.
                key.SetValue("", "");
                dialog.SelectionChanged += Dialog_SelectionChanged;
                if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
                {

                    DestDBFile = dialog.FileName;
}

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Есть пара огромных проблем с тем, что ты делаешь.

Во-первых, ваше приложение должно быть запущено от имени администратора, чтобы изменить ClassesRoot. На самом деле это псевдоним, который указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Classes.

Изменение этой клавиши для удаления контекстного меню делает это для всей машины, а не только для вашего приложения! Таким образом, удаление контекстного меню с помощью вашего метода также повлияет на каждое приложение, которое работает или будет запущено, когда вы показываете OpenFileDialog в своем приложении.


Чтобы сделать это правильно, вам придется создать свой собственный диалоговый элемент управления для этого.


Member 13033417

можете ли вы предоставить код для отключения контекстного меню?

Dave Kreskowiak

Нет, я не могу, потому что вы не можете отключить контекстное меню. Однако вы можете создать свой собственный класс OpenFileDialog в обычной форме. Если вам не нужно контекстное меню, не добавляйте функциональность контекстного меню.