Foros del Web » Programando para Internet » ASP Clásico »

Acceso al registro de Windows mediante una componente COM usada desde ASP

Estas en el tema de Acceso al registro de Windows mediante una componente COM usada desde ASP en el foro de ASP Clásico en Foros del Web. Me ha surgido una duda, y de las grandes: Explicare lo que estaba haciendo: Estoy creando una aplicación ASP con componentes COM usando arquitectura DNA. ...
  #1 (permalink)  
Antiguo 05/02/2003, 08:49
inukisoft
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Acceso al registro de Windows mediante una componente COM usada desde ASP

Me ha surgido una duda, y de las grandes:

Explicare lo que estaba haciendo:
Estoy creando una aplicación ASP con componentes COM usando arquitectura DNA. La conexion a la base de datos (el DSN, el UID, el PWD) no lo voy a dejar dentro de una componente, o en un archivo de texto. Para eso se almacenaran estos datos en el registro de windows, usando para ello los metodos GetSetting y SaveSetting.
La componente la he probado con un formulario de Visual Basic, y recupera las entradas del registro de windows. La conexion a la base de datos resulta.

Pero el problema ahora es cuando quize probar esto en una página ASP. Al instanciar el objeto de conexion, este no funcionaba....
hasta que busque en Internet y dice que no se puede usar el GetSetting y el SaveSetting dentro de un entorno de programacion no atendida, como lo es IIS.
Dice el articulo, que se tiene que resolver usando las entradas
"HKEY_LOCAL_MACHINE" o "HKEY_USERS", pero igual estas no funcionan. sale el error:

Tipo de error:
WshShell.RegRead (0x80070003)
Invalid root in registry key "HKEY_USERS".
/entrada_registro.asp, line 4)

. Lo que decia el articulo no me ha funcionado... (se usa para el acceso al registro la componente "WScript.shell").

porcierto, uso IIS 5 y win 2000 profesional.

La pregunta es , ¿ alguien sabe como tener acceso al registro de windows desde una pagina ASP o desde una componente COM invocada en un ambiente IIS en ASP, y que haya funcionado?


Gracias.
  #2 (permalink)  
Antiguo 12/03/2003, 18:06
 
Fecha de Ingreso: agosto-2002
Ubicación: Santiago, CHILE
Mensajes: 25
Antigüedad: 22 años, 8 meses
Puntos: 0
inukisoft, el siguiente código me ha servido ene veces para hacer lo que tu deseas, esta hecho en VB 6.0, pero debes compilarlo como DLL, luego Registrarlo en IIS 4.0 o 5.0 da lo mismo.
Espero que te sirva, si no envíame un email y te paso el código.
es mas simple de lo que imaginas, tranquilo.

mi email es : [email protected], suerte!!!!

Acá va el código del Form
-------------------------------

Const REG_SZ As Long = 1
Const REG_DWORD As Long = 4

Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003

Const ERROR_NONE = 0
Const ERROR_BADDB = 1
Const ERROR_BADKEY = 2
Const ERROR_CANTOPEN = 3
Const ERROR_CANTREAD = 4
Const ERROR_CANTWRITE = 5
Const ERROR_OUTOFMEMORY = 6
Const ERROR_INVALID_PARAMETER = 7
Const ERROR_ACCESS_DENIED = 8
Const ERROR_INVALID_PARAMETERS = 87
Const ERROR_NO_MORE_ITEMS = 259
Const KEY_ALL_ACCESS = &H3F
Const REG_OPTION_NON_VOLATILE = 0

Const PROCESSOR_INTEL_386 = 386
Const PROCESSOR_INTEL_486 = 486
Const PROCESSOR_INTEL_PENTIUM = 586
Const PROCESSOR_INTEL_860 = 860
Const PROCESSOR_MIPS_R2000 = 2000
Const PROCESSOR_MIPS_R3000 = 3000
Const PROCESSOR_MIPS_R4000 = 4000
Const PROCESSOR_ALPHA_21064 = 21064

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Private Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Private Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long

Private Sub QueryValue(sKeyName As String, sValueName As String)
Dim lRetVal As Long
Dim hKey As Long

lRetVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
RegCloseKey (hKey)
End Sub

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String

On Error GoTo QueryValueExError

lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)

If lrc <> ERROR_NONE Then Error 5

Select Case lType
' Para Strings
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
'sValue = ""
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If

' Para DWORDS
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_NONE Then vValue = lValue
Case Else
'Cualquier tipo de data no soportado
lrc = -1
End Select

QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function

Private Sub SetKeyValue(sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Dim lRetVal As Long
Dim hKey As Long

lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
RegCloseKey (hKey)
End Sub

Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ
sValue = vValue & Chr$(0)
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
End Select
End Function

Private Sub Form_Load()

QueryValue "Software\Meganet\FuncLib\Version 1.0", "Empresa"

If IsEmpty(vValue) Then
PagInicio = "0"
Else
PagInicio = vValue
End If

End Sub

************************************************** *

Acá vá el código del Module
-----------------------------------

Public vValue As Variant
  #3 (permalink)  
Antiguo 12/03/2003, 18:11
inukisoft
Invitado
 
Mensajes: n/a
Puntos:
Gracias...
pero encontre algo mas facil para ahorrarse esto.
es lo siguiente:
IISREGISTR.exe que esta en microsoft (puaj)

Pero el componente viene con el codigo abiero en Visual C.

se registra y se usan unas funciones especiales para acceder

al registro via iis. Es buena.

Gracias compañero, se lo agradesco de todas formas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:32.