Cómo determinar (para una máquina que ejecuta Windows XP/Vista/7) si ACE o JET está instalado, entonces puedo usar una cadena de conexión apropiada para conectarme a una base de datos de acceso.¿Cómo se determina si ACE o JET en una máquina con Windows usa .net?
Respuesta
Hay una clave de registro que puede verificar. Está en HKCR\Microsoft.ACE.OLEDB.12.0
. Puedes leerlo usando la clase RegistryKey
.
Tenga en cuenta que RegistryKey puede estar allí, pero la conexión OleDb aún puede fallar debido a problemas de 32 bits/64 bits. Si la máquina de destino tiene 32 bits ACE.OLEDB instalados, asegúrese de que la aplicación esté compilada para apuntar a la CPU de 32 bits. De lo contrario, la aplicación se puede ejecutar en 64 bits (en un sistema operativo de 64 bits) y luego no puede cargar la versión instalada de 32 bits de ACE.OLEDB.
¿Cómo puede verificar qué arquitectura (si la hay) del proveedor está instalada? –
De acuerdo, el Registro no es el mejor método (versiones de 32 y 64 bits, permisos de usuario, etc.). Sin embargo, la pregunta original indicaba "utilizar una cadena de conexión adecuada": este es un problema de tiempo de ejecución, no un problema de tiempo de compilación. Una solución podría ser usar OleDbEnumerator.
Aquí hay un ejemplo que busca la versión de 32 bits de Microsoft Access (ACE 12.0). para una aplicación x86:
using System.Data;
using System.Data.OleDb;
static bool AceOleDb12Present()
{
OleDbEnumerator enumerator = new OleDbEnumerator();
DataTable table = enumerator.GetElements();
bool bNameFound = false;
bool bCLSIDFound = false;
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
if ((col.ColumnName.Contains("SOURCES_NAME")) && (row[col].ToString().Contains("Microsoft.ACE.OLEDB.12.0")))
bNameFound = true;
if ((col.ColumnName.Contains("SOURCES_CLSID")) && (row[col].ToString().Contains("{3BE786A0-0366-4F5C-9434-25CF162E475E}")))
bCLSIDFound = true;
}
}
if (bNameFound && bCLSIDFound)
return true;
else
return false;
}
- 1. Desarrollo de Remote C en una máquina UNIX desde una máquina con Windows que usa eclipse
- 2. ¿Cómo se determina programáticamente si una computadora con Windows es miembro de un dominio?
- 3. Cree una máquina virtual en azul de Windows mediante programación con código C# o .net
- 4. Instalando NodeJS en una máquina con Windows?
- 5. ¿Cómo se determina cuando Windows termina de reiniciar?
- 6. ¿Cómo se determina si un tipo determinado (System.Type) hereda de una clase base específica (en .Net)?
- 7. ¿Cómo se usa Elastic Net?
- 8. ¿Cómo se determina si CKEditor está cargado?
- 9. cómo comprobar si sshd se ejecuta en una máquina remota
- 10. ¿Determina si una aplicación está bloqueada/ocupada?
- 11. ¿Cómo se determina si una lista bidimensional contiene un valor?
- 12. ¿Cómo se determina si SqlConnection se alistó en un System.Transactions 'tx o no?
- 13. ¿Cómo puedo usar el escritorio remoto para una máquina con Windows desde una máquina con Linux?
- 14. ¿Cómo puedo saber si una aplicación win32 usa .NET runtime
- 15. ¿Cómo se determina una SoapAction válida?
- 16. C# HttpWebRequest - ¿Cómo se determina si se realizó HTTP 301?
- 17. ¿Cómo puedo detectar si mi ensamblado .NET se está ejecutando desde un sitio web o desde una máquina de escritorio?
- 18. ¿Cómo se usa RequireJS en una aplicación .NET?
- 19. ¿Qué determina el orden de los dispositivos de sonido en windows cuando se usa winmm.dll?
- 20. ¿Cómo se usa Ninject en una aplicación de Windows Forms?
- 21. Determine si Linux o Windows en C++
- 22. ¿Cómo se usa .net Reflection with T4?
- 23. ¿Cómo se usa O, Y en condicionales?
- 24. Consultar hoja de cálculo de Excel con C# .NET sin usar Jet OLE DB
- 25. ¿Cómo se determina si dos nodos están conectados?
- 26. ¿Cómo eliminar completamente Python de una máquina con Windows?
- 27. ¿Cómo detectar si mi aplicación se está ejecutando en una máquina virtual?
- 28. determina programáticamente si la dirección IP se asigna mediante dhcp o se establece manualmente en java
- 29. ¿Cómo saber si se compiló una aplicación .NET en modo DEBUG o RELEASE?
- 30. ¿Cómo se usa el servidor IIS en una máquina virtual en un host Mac?
Jet siempre está instalado. La pregunta es realmente solo si ACE está instalado o no. –
Creo que la etiqueta "ACE" no es apropiada aquí, porque la mayoría de los desarrolladores, incluido yo mismo, pensamos en Adaptive Communication Environment (http://www.cse.wustl.edu/~schmidt/ACE.html) cuando ven "ACE", que no tiene nada que ver con tu pregunta. –
@Alexei: etiqueta eliminada – willem