Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB.NET] Verificare lo stato di una chiave di registro

    Buongiorno, in un programma che ho scritto in Visual Basic con Visual Studio 2015 sto tentando di verificare lo stato di una chiave di registro, utilizzo le seguenti righe di codice per farlo:
    codice:
            Dim StatoChiave As String
            StatoChiave = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting", "EnableZip", "NotExist")
    Dopo aver eseguito questo codice il valore che mi ritrovo nella variabile è sempre "Nothing", a prescindere dallo stato della chiave.

  2. #2
    Ho risolto... in parte...
    L'errore sta nei doppi "/", quindi il codice corretto è:

    codice:
    DimStatoChiaveAsString
            StatoChiave=Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting","EnableZip","NotExist")
    

    Questo funziona con le chiavi di registro già esistenti, se ne creo una nuova come valore mi ritorna sempre "NotExist", come se il sistema non la vedesse nel registro, perché?

  3. #3
    Ho fatto un errore comunque, sia nel titolo che nei post, mi interessa sapere lo stato di un valore di una chiave, non lo stato della chiave.

  4. #4
    Mi sono sbagliato, il risultato è errato anche per i valori già esistenti della chiave, esce fuori sempre lo stesso valore a prescindere da quale sia il vero stato del valore della chiave di registro.
    Questa riga di codice scritta in C# da il risultato corretto:

    codice:
                object exceptionsDialog = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\Windows Error Reporting", "EnableZip", null);
    Come andrebbe tradotta in Visual Basic?
    Ho provato così ma non funziona lo stesso:

    codice:
            Dim StatoValore As Object
            StatoValore = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting", "EnableZip", Nothing)

  5. #5
    Ho risolto, il problema era dovuto al fatto che senza specificare la visualizzazione del registro, come visualizzazione veniva utilizzata automaticamente quella a 32bit, quindi in pratica venivo deviato nella sottochiave "Wow6432Node" e tutte le sottochiavi e i valori che rilevavo da programma si trovavano in quella sottochiave e non dove credevo io.

    Ho modificato il codice in questo modo e adesso funziona:
    codice:
            Dim ChiaveX64, SubChiave As RegistryKey
    
    
            ChiaveX64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
    
    
            SubChiave = ChiaveX64.OpenSubKey("SOFTWARE\Microsoft\Windows\Windows Error Reporting", True)
            'Controllo se esiste la sottochiave nel registro di sistema.
            If SubChiave Is Nothing Then
                
            Else
                'Controllo lo stato del valore della sottochiave.
                Dim Valore = SubChiave.GetValue("EnableZip", "NotExist")
            End If

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.