2011-12-28 52 views
8

Estoy creando una biblioteca de clases que toma archivos .SQL como entrada (FileInfo) y una cadena de conexión. Luego intenta ejecutar el archivo sql contra la conexión.¿La forma correcta de detectar si está instalado SQLCMD.exe?

he decidido apoyar SMO de Microsoft y sqlcmd.exe

En las pruebas, he notado en muchas máquinas en mi entorno, que SQLCMD no viene instalado por defecto. Mis errores de programa cuando intento ejecutar el proceso SQLCMD.exe.

¿Cuál es la forma correcta de buscarlo sin tener que buscar todo el disco duro? ¿Hay una ubicación de registro común que especifique si está instalada? Por lo general, cuando está instalado, creo que se establece una ubicación PATH.

Muchas gracias.

+0

Se podría intentar ejecutar 'sqlcmd.exe -?' En un proceso en su aplicación de C# - si funciona, entonces SQLCMD está presente - si no, voy a decir algo así como "archivo no encontrado" o comando" inválido "o algo ... –

+0

@marc_s sí, eso es lo que estaba pensando ... simplemente no es lo que yo pensaba que era el más limpio para una biblioteca de clase que será un componente esencial de muchas aplicaciones. –

Respuesta

8

Tengo una máquina 64 con SQL SERVER de 64 bits (2k8 R2) y mi SQLCMD.EXE está en c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE.

Está también en el camino.

Se podía buscar la ruta de acceso directamente desde la ubicación del registro de SQL Server:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup\path 

o una variante de esto para una versión diferente.

El gran problema aquí es que SQLCMD es parte de las herramientas de cliente, no el SQL Server Así que creo que no se puede pedir a SQL Server para decirle. A menos, por supuesto, que estés ejecutando en el servidor en sí.

+1

SQL Server podría instalarse en un directorio diferente (como en la unidad D: o algo así), por lo que consultar el directorio no es una forma muy confiable ... definitivamente debe ir primero al directorio 'Herramientas' del registro. .. –

+0

Tenga en cuenta que si está haciendo esto en C# y utiliza el método Registry.LocalMachine.OpenSubKey(), la ubicación x86 se devolverá en máquinas con ventanas de 64 bits (por ejemplo, C: \ Archivos de programa (x86) \ ...). Obtendrá un "archivo no encontrado" en este caso porque SQL Server no instala SQLCMD allí. Tenga en cuenta que esto solo aplica si su aplicación es x86. –

+4

También tenga en cuenta, herramientas sql2012 se instalan en ..Microsoft SQL Server \ 110 \ Tools .. (es decir, no '100') y que no consigue poner en el camino si instala la herramienta incrustada través SqlCmdLnUtils.msi. No parece prudente usar una clave de registro que también incluya un número específico de la versión. ¿Qué hay de HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SqlCmdLnUtils \ CurrentVersion? – PandaWood

Cuestiones relacionadas