Registry Key ändern / System32

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ThePlexian.

    Registry Key ändern / System32

    Hey Leute !

    Ich hab mal ein paar Fragen zur Registry:
    Also als erstes will ich einen Wert in die Registry eintragen, in meinem Fall so:

    VB.NET-Quellcode

    1. Try
    2. Dim regpath As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background"
    3. Dim regkey As RegistryKey = Registry.LocalMachine.OpenSubKey(regpath, RegistryKeyPermissionCheck.ReadWriteSubTree)
    4. regkey.SetValue("OEMBackground", "1", RegistryValueKind.DWord)
    5. regkey.Close()
    6. Catch ex As Exception
    7. MsgBox(ex.Message, MsgBoxStyle.Critical)
    8. End Try


    VB.NET-Quellcode

    1. 'app.manifest:
    2. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />


    So, wenn ich jetzt regedit öffne und mir den Key angucke, hat sich nichts verändert, aber wenn ich den Key danach als MsgBox ausgebe, sehe ich den geänderten Wert.
    1. Liegt das jetzt daran dass ich die Registry neu laden muss (PC Restart), und die Änderung zu sehen?
    2. Was ist wenn der Ordner oder der Key nicht existiert, wird er dann erstellt ?


    Und dann, wenn ich eine Datei in den System32 Ordner verschieben will, dann brauche ich ja logischerweise auch die Adminrechte aus der app.manifest.
    Aber wenn ich mit "System.IO.File.Copy()" eine Dátei in den Ordner kopieren will, dann wird er in den SysWOW64-Ordner verschoben, das will ich ja gar nicht ^^
    Als CPU beim Debuggen hab ich Any CPU, und der genaue Path wäre "C:\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg"

    Ich hoffe ihr könnt mir helfen :D
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    So, wenn ich jetzt regedit öffne und mir den Key angucke
    Bist Du sicher, dass Du Dir den richtigen Kea angesehen hast?
    Kopiere die Pfade und vergleiche sie im Notepad oder so.

    ThePlexian schrieb:

    dann wird er in den SysWOW64-Ordner verschoben
    Du arbeitest also mit 64 Bit. ;)
    Wie lautet im Copy-Befehl der genaue Pfad?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Bist Du sicher, dass Du Dir den richtigen Kea angesehen hast?
    Kopiere die Pfade und vergleiche sie im Notepad oder so.

    Jap, sind genau gleich :pinch:

    RodFromGermany schrieb:

    Wie lautet im Copy-Befehl der genaue Pfad?


    VB.NET-Quellcode

    1. imagepath = "C:\Users\...\Desktop\bild.path" 'Besipiel, der Path wird in nem OpenFileDialog ausgewählt
    2. destinationpath = "C:\Windows\System32\oobe\info\backgrounds\"
    3. File.Copy(imagepath, destinationpath & "backgroundDefault.jpg", True)


    Was mir grad noch auffällt:
    Im Sub "Form1_Load" wird in eine PictureBox ein Bild geladen: "C:\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg"
    Geladen wird aber "C:\Windows\SysWOW64\oobe\info\backgrounds\backgroundDefault.jpg"
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    Was mir grad noch auffällt:
    Mach mal sowas:

    VB.NET-Quellcode

    1. Dim path1 = Environment.GetFolderPath(Environment.SpecialFolder.System)
    2. Dim path2 = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Na überleg mal:

    VB.NET-Quellcode

    1. Dim path1 = Environment.GetFolderPath(Environment.SpecialFolder.System)
    2. Dim path2 = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)
    3. MessageBox.Show(path1 & Environment.NewLine & path2)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay, danke :)

    Ich hab das ganze jetzt aber anders gelöst:
    Ich den Projekt-Eigeschaften Ziel-CPU --> x64, das wars schon :)

    Heißt das jetzt dass 32bit Systeme das nicht ausführen können ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    Heißt das jetzt dass 32bit Systeme das nicht ausführen können ?
    So isses.
    Mach einen Test mit x86, einen mit x64, sorge dafür, dass es auf beiden läuft und mach dann final AnyCPU.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay, unter x64 läuft es bekanntlich, aber unter x86 geht er trotzdem in dem SysWOW64-Ordner, auch wenn ich

    VB.NET-Quellcode

    1. destinationpath = Environment.GetFolderPath(Environment.SpecialFolder.System) & "\oobe\info\backgrounds\"

    eingefügt hab :/
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Also ich hab jetzt folgendes herausgefunden:

    x64 System und Programm läuft unter x64 --> funktioniert
    x86 System und Programm läuft unter x86 --> funktioniert
    x64 System und Programm läuft unter x86 --> funktioniert nicht
    x86 System und Programm läuft unter x64 --> funktioniert nicht

    Wie bekomm ich das jetzt hin, die Kompilierungs-CPU einzustellen, je nachdem welches System activ ist?
    Geht das überhaupt wenn man das ne exe ist ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    die Kompilierungs-CPU einzustellen
    das ist AnyCPU.
    Möglicherweise musst Du dann feststellen, ob Du unter 32 oder 64 Bit arbeitest, da gibt es eine Environment-Konstante glaub ich.
    Ansonsten Sizeof(IntPtr) ==> 32 oder 64.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die Konstante ist "Environment.Is64BitOperatingSystem" und die vom Prozess ist "Environment.Is64BitProcess".

    Wenn ich aber die CPU auf AnyCPU umstelle, dann nimmt das Programm trotzdem den SysWOW64-Ordner, obwohl ich ein 64bit System hab.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Das hängt dann vom System ab.
    Klar, dass ein AnyCPU-Programm auf einer 64-Maschine als 64-Bit-Prozess läuft.
    Probier das mal, so Du kannst, auf einer 32-Bit-Maschine aus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Klar, dass ein AnyCPU-Programm auf einer 64-Maschine als 64-Bit-Prozess läuft.

    Eben das ist ja das Problem :D ich hab ja 64-bit, und wenn ich das Programm unter x64 laufen lasse geht es (System32 Ordner), wenn ich es aber unter AnyCPU laufen lasse, nimmt er der SysWOW64-Ordner ?(
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Das Problem ist also, dass x86 nicht auf beiden Typen läuft...
    Das hatte ich auch schon einmal:
    1. Kopiere den ganzen Visual Studio 2010 Ordner auf den Desktop als Backup
    2. Gehe in den Ordner und lösche den Ordner: settings
    3. Starte Visual Studio
    4. Nun sollte ne Fehlermeldung kommen
    5. Nun sollte es gehen...

    Wenn nicht, dann deinstalliere Visual Studio komplett und installiere es neu...
    Projekte vorher speichern!
    Geht das eig nur mit dem Projekt nicht?
    Also genau genommen ist dass Problem, dass man nur Zugriff in den System32 Ordner bekommt als Admin, und dieser auch nur angewählt wird wenn da Programm unter x64 läuft, sonst nimmt er den SysWOW64 Ordner.
    Und dann noch, obwohl ich 64-bit habe, wird das Programm bei Any CPU scheinbar als x86 ausgeführt (zumindest wird der SysWOW64-Ordner genommen)
    :/
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais