Chequear valor en registy y ejecutar programa

17/11/2003 - 14:46 por Eduardo G Silva | Informe spam
Hola a todos, en realidad soy un intruso en este foro, programo hace años en
VB y PHP nunca me habia metido con C++ pero me surguio un problema que no
puedo resolver con vb y hace dos semanas que estoy internado intentando
desmarañar Visual C y si bien estoy facinado tambien estoy a punto del
colapso nervioso.

Hice una aplicacion multimedia en VB y un Instalador de dicha aplicacion
ahora bien mi cliente me pidio que tenga autorun el problema es que no puedo
hacer el autorun en VB porque para ejecutarlo antes tengo que instalar al
menos la vbrun correspondiente a la version.

Por eso comence a hacer una Win32 Console Application que lo unico que tiene
que hacer es ver es si existe una clave en la registy y si la encuentra
ejecutar un exe que se encuentra en el valor de la clave. Si no lo
encuentra tiene que ejecutar el instalador que esta en el cd. Tengo
entendido que este programita que estoy haciendo en VC no va a necesitar
registrar nada para ejecutarse.

Hasta aca todo bien el problema es que no me da la cabeza si tubiese que
hacer esto en VB agregaria una API en un modulo y invocaria la funcion en un
procedimiento.

Encontre un ejemplo navegando por ahi que ve si un valor de la registy
existe pero no entiendo como hace para incluir en el proyecto por ejemplo
RegOpenKeyEx. Creo que estoy cerca de la solucion pero me un empujoncito

Me dan una mano.

Muchas Gracias y gracias por la paciencia






void LeeClave(void)
{
HKEY key;
char subKey[] = "Software\\Mecenas-Brasil\\MuchoGusto";
char valName[] = "Instalacion"; /* ruta del exe instalado */
char val[255];
char valAca[255];
int size = sizeof(val)-1;
DWORD type = REG_SZ;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS, &key))
MessageBox(NULL, key, "Primer mensaje", MB_OK | MB_ICONERROR);
// return;

if(RegQueryValueEx(key, valName, NULL, &type, val, &size))
{
// wsprintf(val, "%d", "que va");
// RegSetValueEx(key, valName, 0, REG_SZ, val, strlen(val));
MessageBox(NULL, "aca tendria que estar", val, MB_OK | MB_ICONERROR);
}
else
{
MessageBox(NULL, subKey, "No entro en el query", MB_OK | MB_ICONERROR);
}
RegCloseKey(key);
MessageBox(NULL, subKey, "ultimo mens", MB_OK | MB_ICONERROR);
}


begin 666 Eduardo Germán Silva.vcf
M0D5'24XZ5D-!4D0-"E9%4E-)3TXZ,BXQ#0I..E-I;'9A.T5D=6%R9&\[1V5R
M;>%N#0I&3CI%9'5A<F1O($=E<FWA;B!3:6QV80T*3D]413M%3D-/1$E.1SU1
M54]4140M4%))3E1!0DQ%.D=U/45$82!D92!U<V\@9&5L(&9O<F\Z/3!$/3!!
M:'1T<#HO+W!E<G-O+G=A;F%D;V\N97,O<G5B96YV:6=O;B]F;W)O/3!$/3!!
M#0I%34%)3#M04D5&.TE.5$523D54.D5D=6%R9&]3:6QV84!M96-E;F%S+F-O
D;0T*4D56.C(P,#,Q,3$W5#$S-#8R.5H-"D5.1#I60T%21 T*
`
end

Preguntas similare

Leer las respuestas

#1 my name
18/11/2003 - 03:00 | Informe spam
"Eduardo G Silva" wrote in
news::

Mostrar la cita
Para hacer q un CD tenga autorun no necesitas crear una aplicacion en VC,
solo tienes q crear en el directorio raiz del CD un fichero llamado
autorun.inf

[autorun]
open=Instalar.exe
icon=tuicono.ico


Mostrar la cita
Estas funciones en VB serian:

Public 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

Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As
Long
' Note that if you declare the lpData parameter as String, you must pass it
By Value.

Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As
Long) As Long
' Note that if you declare the lpData parameter as String, you must pass it
By Value.

Public Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey"
(ByVal hKey As Long) As Long






Mostrar la cita
#define BUFSIZE 1024

HKEY hKey;
TCHAR val[BUFSIZE];
DWORD dwBufLen=BUFSIZE;
LONG lRet;

TCHAR subKey[] = _T("Software\\Mecenas-Brasil\\MuchoGusto");
TCHAR valName[] = _T("Instalacion"); /* ruta del exe instalado */
TCHAR val[BUFSIZE];


lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
subKey),
0,
KEY_QUERY_VALUE,
&hKey );

// encontrada
if( lRet == ERROR_SUCCESS )
{
// Consultar la clave del registro
lRet = RegQueryValueEx( hKey, valName, NULL, NULL,
(LPBYTE) val, &dwBufLen);


if( (lRet == ERROR_SUCCESS) || (dwBufLen < BUFSIZE) )
{

// Ejecutas el programa si se encuentra la clave

RegCloseKey( hKey );
}

}



Mostrar la cita
http://perso.wanadoo.es/rubenvigon/foro

Mostrar la cita
Te mando un ejemplo en VB de acceso al registro por si lo quieres manejar
de ese modo y no con VC.






Saludos
#2 my name
18/11/2003 - 03:02 | Informe spam
my name wrote in
news::

Mostrar la cita
Para hacer q un CD tenga autorun no necesitas crear una aplicacion en VC,
solo tienes q crear en el directorio raiz del CD un fichero llamado
autorun.inf

[autorun]
open=Instalar.exe
icon=tuicono.ico


Mostrar la cita
Estas funciones en VB serian:

Public 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

Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As
Long
' Note that if you declare the lpData parameter as String, you must pass it
By Value.

Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As
Long) As Long
' Note that if you declare the lpData parameter as String, you must pass it
By Value.

Public Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey"
(ByVal hKey As Long) As Long






Mostrar la cita
#define BUFSIZE 1024

HKEY hKey;
TCHAR val[BUFSIZE];
DWORD dwBufLen=BUFSIZE;
LONG lRet;

TCHAR subKey[] = _T("Software\\Mecenas-Brasil\\MuchoGusto");
TCHAR valName[] = _T("Instalacion"); /* ruta del exe instalado */
TCHAR val[BUFSIZE];


lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
subKey),
0,
KEY_QUERY_VALUE,
&hKey );

// encontrada
if( lRet == ERROR_SUCCESS )
{
// Consultar la clave del registro
lRet = RegQueryValueEx( hKey, valName, NULL, NULL,
(LPBYTE) val, &dwBufLen);


if( (lRet == ERROR_SUCCESS) || (dwBufLen < BUFSIZE) )
{

// Ejecutas el programa si se encuentra la clave

RegCloseKey( hKey );
}

}



Mostrar la cita
http://perso.wanadoo.es/rubenvigon/foro

Mostrar la cita
Te mando un ejemplo en VB de acceso al registro por si lo quieres manejar
de ese modo y no con VC.






Saludos
#3 Eduardo G Silva
18/11/2003 - 16:44 | Informe spam
Muchas gracias por la molestia, en vb no tengo problema de acceder a la
registry, mi problema era en C++ que hasta hace un par de dias no sabia ni
definir una variable.

El codigo que me mandaste me viene barbaro.

De la manera que me mostraste en el autorun siempre se ejecutaria el
instalador y lo que necesito es chequear si el programa ya fue instalado y
si asi fue ejecutarlo.

No lo puedo hacer en VB porque si fuese la primera vez que el usuario entra
no estarian los componentes instalados.

Con el codigo que me enviaste genero un ejecutable que determina si tiene
que ejecutar el instalador o correr el programa instalado.

Muchas Gracias





"my name" escreveu na mensagem
news:
Mostrar la cita
it
Mostrar la cita
it
Mostrar la cita
http://perso.wanadoo.es/rubenvigon/foro

Mostrar la cita
#4 Eduardo G Silva
18/11/2003 - 17:00 | Informe spam
El codigo que me mandaste funciona perfecto pero como hago para limpiar el
valor de la key y ponerlo en una variable?

Porque en la key esta la ruta del programa, en vb seria asi:

r = RegOpenKey(Hkey, strPath, keyhand)
lResult = RegQueryValueEx(keyhand, strValue, 0&, lValueType, ByVal 0&,
lDataBufSize)
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, " ")
lResult = RegQueryValueEx(keyhand, strValue, 0&, 0&, ByVal strBuf,
lDataBufSize)
If lResult = ERROR_SUCCESS Then
intZeroPos = InStr(strBuf, Chr$(0))
If intZeroPos > 0 Then
p_funRegBuscaString = Left$(strBuf, intZeroPos - 1)
Else
p_funRegBuscaString = strBuf
End If
End If
End If


pero no se como hacerlo en c.


Gracias, saludos
#5 Eduardo G Silva
18/11/2003 - 17:12 | Informe spam
Perdon ahi lo encontre esta en "val". Sale con fritas

Gracias nuevamente.

PD: me dieron tantas ganas de aprender C++ que me voy a la libreria a
comprar algun libraco.



"Eduardo G Silva" escreveu na
mensagem news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida