Как удалить раздел реестра?

Это мой код:

Dim exePath As String = Application.ExecutablePath()
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store", True)
key.DeleteValue(exePath)

Но я не знаю, почему приложение не удаляет этот ключ.

Пример: он находит ключ, но не удаляет этот ключ

введите здесь описание изображения


person HeyMyBoy    schedule 03.02.2018    source источник
comment
Выброшено ли исключение?   -  person Crowcoder    schedule 03.02.2018
comment
@Crowcoder нет, только если я вручную удалю ключ.   -  person HeyMyBoy    schedule 03.02.2018
comment
Когда вы открываете приложение, оно создает этот ключ....... Я просто хочу удалить ..\Store\Этот ключ (этот ключ = путь к файлу.....). исключение не запускается, но он не удаляет этот ключ   -  person HeyMyBoy    schedule 03.02.2018
comment
Поскольку вы не удаляете ключ... Попробуйте My.Computer.Registry.CurrentUser.DeleteSubKey("Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store")   -  person zaggler    schedule 03.02.2018
comment
Итак, вы хотите удалить значение из ключа? Тогда, пожалуйста, скорректируйте свой вопрос. Также вы компилируете 32 или 64?   -  person zaggler    schedule 03.02.2018
comment
Да простите, код?   -  person HeyMyBoy    schedule 03.02.2018
comment
Да код...   -  person zaggler    schedule 03.02.2018
comment
нет, какой правильный код.....(смеется)?   -  person HeyMyBoy    schedule 03.02.2018
comment
Вы пробовали работать от имени администратора, вы можете попробовать это. Также при компиляции для 32-битной версии попробуйте 64 или AnyCpu.   -  person zaggler    schedule 03.02.2018
comment
Я уже открываю приложение как администратор, но оно не удаляет значение   -  person HeyMyBoy    schedule 03.02.2018


Ответы (2)


Это значение создается системой автоматически при запуске приложения, то есть вы не можете удалить его во время работы приложения.

Вы можете удалить его после закрытия приложения, если хотите, но вы должны удалить его из отдельного приложения, и оно будет создано заново при следующем запуске приложения.

Достаточно запустить простой экземпляр cmd для удаления:

Dim psi As New ProcessStartInfo("cmd.exe", "/C timeout /t 3 /nobreak > NUL & reg delete ""HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"" /v """ & Application.ExecutablePath & """ /f")
psi.CreateNoWindow = True
psi.WindowStyle = ProcessWindowStyle.Hidden
Process.Start(psi)
person Visual Vincent    schedule 03.02.2018
comment
Это не дает мне никакой ошибки, но приложение по-прежнему не удаляет это значение. - person HeyMyBoy; 04.02.2018
comment
@HeyMyBoy : Каково точное значение Application.ExecutablePath? - person Visual Vincent; 04.02.2018
comment
В этом случае C:\Users\Simone\Desktop\Games.exe - person HeyMyBoy; 04.02.2018
comment
@HeyMyBoy: И это точное значение? Например, если вы поместите MessageBox.Show(Application.ExecutablePath) в свой код, он покажет, что вы только что написали? - person Visual Vincent; 04.02.2018
comment
Если файл находится по этому пути да - person HeyMyBoy; 04.02.2018
comment
@HeyMyBoy: Хм, это очень странная проблема, с которой вы столкнулись ... Если вы в моем коде замените RegKey.DeleteValue(...) на System.IO.File.WriteAllText("C:\Users\Simone\Desktop\RegValues.txt", String.Join(Environment.NewLine, RegKey.GetValueNames())), он должен создать на вашем рабочем столе файл с именем RegValues.txt - значение, которое вы хотите удалить, присутствует в этом файле? - person Visual Vincent; 04.02.2018
comment
Да, я хочу удалить значение из этого списка - person HeyMyBoy; 04.02.2018
comment
@HeyMyBoy: Так ты нашел это в файле RegValues.txt? Когда значение изначально создается, оно создается системой автоматически или вы создаете его самостоятельно в своем приложении? - person Visual Vincent; 04.02.2018
comment
Когда вы автоматически открываете приложение, система (ПК) создает это значение в реестре. - person HeyMyBoy; 04.02.2018
comment
@HeyMyBoy: А, тогда это твоя проблема. Вы не можете удалить его во время работы вашего приложения. Если вы хотите удалить его при закрытии своего приложения, вам придется запустить отдельное приложение, чтобы сделать это за вас (для этого отлично подойдет простой экземпляр cmd). - person Visual Vincent; 04.02.2018
comment
@HeyMyBoy: Рад, что смог помочь, хотя я бы не стал слишком быстро принимать это как ответ. Сначала вам нужно убедиться, что он работает так, как вы хотите. - person Visual Vincent; 04.02.2018

Чтобы удалить ключ, используйте метод DeleteSubKey. Пример будет выглядеть так:

My.computer.Registry.Currentuser.DeleteSubKey(keypath)

Однако согласно MSDN, исключения могут возникать, если

  1. Имя ключа ничего или null

  2. У пользователя нет необходимых прав для удаления/чтения/записи ключа

  3. Имя ключа превышает 255 символов

  4. Ключ настроен только для чтения

person Christopher H.    schedule 03.02.2018
comment
Что я должен делать .-.? - person HeyMyBoy; 03.02.2018
comment
Но код не удаляет это конкретное значение, верно? - person HeyMyBoy; 03.02.2018
comment
Если значение всегда отличается, как удалить значение? Имя значения совпадает с путем к приложению. - person HeyMyBoy; 03.02.2018
comment
Вы видели фото, можете ли вы написать весь/правильный код, пожалуйста? - person HeyMyBoy; 03.02.2018
comment
ау... ты не хочешь удалять ключ, но значение... r8?? - person Christopher H.; 03.02.2018
comment
Бро, я хочу удалить C:\Users\Simone\Desktop\Games.exe - person HeyMyBoy; 03.02.2018
comment
который эквивалентен каталогу, когда вы открываете файл, я хочу исключить это, но это не всегда одно и то же. - person HeyMyBoy; 03.02.2018
comment
я не понимаю... ты пытаешься удалить файл или значение ключа reg? - person Christopher H.; 03.02.2018
comment
Я пытаюсь удалить значение ключа реестра (в данном случае C:\Users\Simone\Desktop\Games.exe) - person HeyMyBoy; 03.02.2018
comment
хорошо, в этом случае ваш код должен работать нормально... попробуйте использовать правильный путь вместо использования переменной (это не имеет смысла, но все равно попробуйте) - person Christopher H.; 03.02.2018
comment
а также попробуйте APPLICATION.STARTUPPATH - person Christopher H.; 03.02.2018
comment
Да, но я не знаю, почему он говорит мне, что такого файла нет. Тогда, как я сказал вам, он основан на каталоге файлов (он постоянно меняется) - person HeyMyBoy; 03.02.2018
comment
Вы имеете в виду My.Computer.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store", True).DeleteValue("C:\Users\Simone\Desktop\Games.exe") правильно?? потому что это не работает - person HeyMyBoy; 03.02.2018
comment
Хорошо, нет, это работает, но значение не всегда одинаково, я должен использовать переменную, верно? - person HeyMyBoy; 03.02.2018
comment
Если я использую этот код, приложение не удаляет значение, но приложение не выдает мне никаких ошибокDim ThisAppPath As String = Application.ExecutablePath My.Computer.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store", True).DeleteValue(ThisAppPath) - person HeyMyBoy; 03.02.2018
comment
ты сказал, что стоимость не всегда одинакова?? затем попробуйте APPLICATION.STARTIPPATH и посмотрите, работает ли он - person Christopher H.; 03.02.2018
comment
Это не работает, потому что.....application.StartUpPath....example(C:\Users\Public\Desktop) в то время как Application.ExecutablePath (C:\Users\Public\Desktop\File.exe) - person HeyMyBoy; 03.02.2018