 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 29 Abr, 2003 8:38 pm Asunto: Obtener el número de versión de ADO instalada |
|
|
Con esta rutina obtenemos el número de versión de ADO que tenemos instalada:
| Código: | // Añadimos: #include <memory>
String GetAdoVersion(void)
{
String sVersion = "(desconocida)";
HKEY hKey;
if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion",
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS )
{
// Buscamos en el registro la localizacion
// del directorio de archivos comunes
char szAdoDllPath[MAX_PATH];
DWORD tamanyo = sizeof(szAdoDllPath);
if ( RegQueryValueEx(hKey, "CommonFilesDir", 0, 0,
reinterpret_cast<unsigned char*>(szAdoDllPath),
&tamanyo) == ERROR_SUCCESS )
{
// Al path de archivos comunes le añadimos el de la dll
StrCat(szAdoDllPath, "\\System\\Ado\\msado15.dll");
if (FileExists(szAdoDllPath))
{
// Obtenemos el numero de version de la dll
tamanyo = GetFileVersionInfoSize(szAdoDllPath, 0);
if (tamanyo)
{
std::auto_ptr<TMemoryStream> stream(new TMemoryStream);
stream->SetSize(static_cast<int>(tamanyo));
// Si el archivo contiene información de versión...
if ( GetFileVersionInfo(szAdoDllPath, 0,
tamanyo, stream->Memory))
{
// Extraemos la identificación de lenguaje
unsigned int datasize;
unsigned short* translation;
VerQueryValue(stream->Memory,
"\\VarFileInfo\\Translation",
reinterpret_cast<void**>(&translation),
&datasize);
// Creamos la cadena de consulta
String key = "\\StringFileInfo\\"
+ String::IntToHex(translation[0], 4)
+ String::IntToHex(translation[1], 4)
+ "\\FileVersion";
// Extraemos la información
char* data;
if (VerQueryValue(stream->Memory, key.c_str(),
reinterpret_cast<void**>(&data), &datasize) )
{
sVersion = data;
}
} // if GetFileVersionInfo
} // if tamanyo
} // if FileExists
else
sVersion = "(ADO no instalado)";
} // if RegQueryValueEx
RegCloseKey(hKey);
}
return sVersion;
} |
Ejemplo de uso:
Edit1->Text = GetAdoVersion();
Las actualizaciones de ADO son gratuitas y se pueden descargar desde:
http://www.microsoft.com/data/ |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 25 Jun, 2003 8:20 pm Asunto: |
|
|
Otra forma de hacerlo, aunque la de arriba da mas detalle:
| Código: | String GetAdoVersion(void)
{
// Añadimos: #include <ComObj.hpp> en todas las versiones,
// excepto en el BCB1 que tenemos que añadir #include<OleAuto.hpp>
Variant vAdo;
String sVersion;
try
{
vAdo = CreateOleObject("AdoDb.Connection");
sVersion = vAdo.OlePropertyGet("Version");
}
catch (...)
{
sVersion = "(ADO no instalado)";
}
vAdo = Unassigned;
return sVersion;
} |
Probado con BCB1, BCB4 y BCB6 en Win95/98/ME/XP |
|
| Volver arriba |
|
 |
joseluisbz Lt Cmdr

Registrado: 31 Ene 2003Mensajes: 101Ubicación: Medellín - Colombia de Barranquilla
|
Publicado: Dom 26 Oct, 2003 6:49 pm Asunto: |
|
|
Yo he intentado para que sirva para cualquier ejecutable...
La idea es que uno elija un ejecutable y examine esa información...
Gracias,... _________________ Please Response to:joseluisbz@bigfoot.com |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|