Código:
Sucede que con un usuario administrativo la aplicación funciona correctamente, pero cuando ejecuto la aplicación con un usuario que no posee permisos de administrador, la aplicación da el siguiente error: "Requested registry access is not allowed."Private Sub sb_GrabaAplicacionesInstaladas(ByVal strNombrePC As String, ByRef cDB As MisClases.clsDB) '--Cargando todos los programas instalados en el registro-- Dim cAplicacion As New MisClases.clsAplicaciones Dim cAplicacionUsuario As New MisClases.clsAplicacionesPorUsuario Dim Key, Key2, PR As Microsoft.Win32.RegistryKey Dim strProgramas() As String Dim strNombre As String Dim strVersion As String Dim strEmpresa As String Dim strRutaUnistall As String Key = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, strNombrePC) Key2 = Key.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", Microsoft.Win32.RegistryKeyPermissionCheck.Default, Security.AccessControl.RegistryRights.FullControl) strProgramas = Key2.GetSubKeyNames() Dim strPrograma As String For Each strPrograma In strProgramas PR = Key2.OpenSubKey(strPrograma, Microsoft.Win32.RegistryKeyPermissionCheck.Default, Security.AccessControl.RegistryRights.FullControl) strNombre = PR.GetValue("DisplayName", "").ToString strVersion = PR.GetValue("DisplayVersion", "").ToString strEmpresa = PR.GetValue("Publisher", "").ToString strRutaUnistall = PR.GetValue("UnInstallString", "").ToString If strNombre <> "" Then '--Grabando en el maestro-- With cAplicacion .pr_Aplicacion = strNombre .pr_Version = strVersion .sb_BuscarPropiedades(.pr_Aplicacion, .pr_Version, cDB) .pr_Empresa = strEmpresa .sb_Grabar(cDB) End With '-------------------------- '--Grabando aplicación instalada al usuario-- With cAplicacionUsuario .pr_NombrePC = strNombrePC .pr_Aplicacion = strNombre .pr_Version = strVersion .sb_BuscarPropiedades(.pr_NombrePC, .pr_Aplicacion, .pr_Version, cDB) .pr_Ruta = strRutaUnistall .sb_Grabar(cDB) End With '-------------------------------------------- End If Next cAplicacionUsuario = Nothing cAplicacion = Nothing '---------------------------------------------------------- End Sub
Según el StackTrace, la aplicación da error al ejecutar el método "OpenSubKey". El StackTrace completo es:
Código:
¿Cómo puedo, desde mi aplicación, enviar los permisos necesarios para que el usuario pueda leer el registro sin problemas? at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource) at Microsoft.Win32.RegistryKey.InternalOpenSubKey(String name, RegistryKeyPermissionCheck permissionCheck, Int32 rights) at Microsoft.Win32.RegistryKey.OpenSubKey(String name, RegistryKeyPermissionCheck permissionCheck, RegistryRights rights) at PCDescriptor.frmPrincipal.sb_GrabaAplicacionesInstaladas(String strNombrePC, clsDB& cDB) at PCDescriptor.frmPrincipal.sb_ObtenerInfo() at PCDescriptor.frmPrincipal.frmPrincipal_Load(Object sender, EventArgs e)

Anteriormente ejecutaba el método "OpenSubKey" asi: "Key2 = Key.OpenSubKey("SOFTWARE\Microsoft\Windows\Current Version\Uninstall\")", pero buscando la forma de enviar los permisos desde mi aplicación, encontré una sobre carga en el método y le pude pasar los siguientes parámetros:
1) Microsoft.Win32.RegistryKeyPermissionCheck.Default
2) Security.AccessControl.RegistryRights.FullControl
Pero aún así no me funciona y me da el mismo error.

Lo más estraño es que con el usuario logueado en la PC, entro a RegEdit y puedo acceder a la llave "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\" sin problemas.
