Omar Alami Ответов: 1

Как я могу переименовать ключ


Здравствуйте я читал это RegRenameKey-скрытый API реестра | блог Павла[^]

Я пытаюсь переименовать ключ, делая это:

Код:
using Microsoft.Win32.SafeHandles;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication7
{
    class Program
    {
        private static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(-2147483646);
        [DllImport("advapi32")]
        public static extern int RegRenameKey(SafeRegistryHandle hKey, [MarshalAs(UnmanagedType.LPWStr)] string oldname,
        [MarshalAs(UnmanagedType.LPWStr)] string newname);
        static void Main(string[] args)
        {
            
            SafeRegistryHandle hKey = null;
            hKey = new SafeRegistryHandle(HKEY_LOCAL_MACHINE,true);
            RegRenameKey(hKey, "SOFTWARE\\Company", "SOFTWARE\\Compa");
            Console.ReadLine();
            
        }
    }
}


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

я пытался переименовать ключ, программа компилируется нормально, но на данный момент я не получаю переименовать ключ help pls..

Bryian Tan

Вы пробовали работать от имени администратора? Кстати, почему вы все равно хотите писать код, чтобы возиться с реестром?

Omar Alami

Я не читал ключ, может быть, для этого..

1 Ответов

Рейтинг:
0

OriginalGriff

Здесь есть пара проблем:
1) Вы используете недокументированные функции. Это опасно, так как нет абсолютно никакой гарантии, что они будут:
1.1) работа.
1.2) работать на операционной системе, отличной от той, для которой она была написана.
1.3) существуют на более поздних ОС.

2) доступ к реестру сильно ограничен - по уважительным причинам - и очень,очень вероятно, что вам потребуется доступ администратора, чтобы сделать очень многое; вероятность того, что в будущем такой доступ станет более ограниченным, а не менее. Никому вообще не рекомендуется использовать реестр для новых проектов.

То, что происходит в вашем приложении, скорее всего, заключается в том, что недокументированная функция терпит неудачу, потому что у вас нет разрешения на это, и что функция "проглатывает" ошибку.

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