Jak zdobyć uprawnienia do odczytu klucza rejestru

0

Chcę z kodu programu pobrać wartość klucza rejestru. Teoretycznie powinien wystarczyć następujący kod:

RegistryKey odczyt = Registry.LocalMachine;
odczyt = odczyt.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\MSSQL12.SQLEXPRESS\\MSSQLServer");
string backuppath = odczyt.GetValue("BackupDirectory").ToString();
odczyt.Close();

Jak widać jest to fragment kodu pobierający ścieżkę do katalogu w którym instancja "SQLEXPRESS" serwera Microsoft SQL tworzy pliki backupu.
Niestety... Dostaję błąd braku uprawnień do tego klucza rejestru. Czy jest jakiś sposób na zdobycie tych uprawnień z kodu programu? A może jest jakiś inny sposób na zdobycie tej ścieżki?

0

Potrzebujesz uruchamiać aplikację z uprawnieniami Administratora dla systemów Vista i wyżej - http://stackoverflow.com/questions/11242610/how-to-get-registry-key-without-having-administrator-rights-in-windows-7-os

0

Niestety... Po uruchomieniu z uprawnieniami administratora program widzi klucz do poziomu "SOFTWARE\Microsoft\Microsoft SQL Server". Jeśli mu dodam kolejny poziom podklucza (MSSQL12.SQLEXPRESS) wyskakuje błąd nieistniejącego klucza, mimo, że klucz istnieje.

1

Być może kompilujesz aplikację jako 32 bitową (x86). Jeżeli tak to spróbuj wybrać AnyCPU lub x64. Jeżeli tak nie jest, to niestety nie wiem co może być jeszcze przyczyną.

0

Kompiluję jako AnyCPU i nie rozumiem, dlaczego program nie widzi tego klucza (i nie tylko tego).
Na dzisiaj rozwiązałem sprawę trochę na około, ale w miarę skutecznie:

public static class BackupPath
    {
        public static string Get(string INSTANCE)
        {
            RegistryKey odczyt = Registry.LocalMachine;
            odczyt = odczyt.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\" + INSTANCE + "\\MSSQLServer\\CurrentVersion");
            string version = odczyt.GetValue("CurrentVersion").ToString().Remove(2);
            string helper1 = "\\" + version + "0\\";
            string helper3 = "\\MSSQL" + version + "." + INSTANCE + "\\MSSQL\\Backup";
            odczyt.Close();
            RegistryKey odczyt2 = Registry.LocalMachine;
            odczyt2 = odczyt2.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\" + version + "0");
            string helper2 = odczyt2.GetValue("VerSpecificRootDir").ToString();
            string SQLpath = helper2.Replace(helper1, helper3);
            SQLpath = SQLpath.Replace(" (x86)", "");
            return SQLpath;
        }
    }

Linia

SQLpath = SQLpath.Replace(" (x86)", ""); 

zmienia w przypadku systemu 64 bit "Program Files (x86)" na "Program Files"

Jak dojdę co było to napiszę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1