2011-04-11 51 views
5

Tengo un instalador creado usando Wix. Me gustaría poder especificar la ubicación donde está instalado el servidor sql. Una solución en la que puedo pensar es colocar un marcador de posición en el script CreateDatabase y en el tiempo de ejecución simplemente reemplazar el marcador de posición con la ruta real especificada por el usuario.Wix: crear una base de datos del servidor sql en una ubicación especificada

Me pregunto si hay alguna forma mejor de hacerlo. ¿Wix proporciona algo que pueda usar?

Gracias,

+1

Termino resolviendo este problema usando un SQL dinámico. Para cualquiera que busque una solución, verifique la respuesta aceptada para la siguiente pregunta: http://stackoverflow.com/questions/5626850/sql-server-use-parameter-in-create-database – sean717

Respuesta

5

Usted puede tomar ventaja de la norma WiX SQL extension. Por ejemplo, el elemento SqlString proporciona una opción para especificar una consulta SQL que se ejecutará en el momento de la instalación. El elemento SqlDatabase proporciona una opción lista para usar para crear una base de datos SQL. Ambos aceptan las propiedades de Windows Installer para los atributos @SQL y @Server, respectivamente. Esto significa que puede obtener la entrada del usuario, guardarla en la propiedad y usar esa propiedad en elementos Sql.

0

No se puede conseguir esto de forma gratuita a partir de WiX.

Usando SqlString, algunos parámetros y como notó el uso directo de CREATE DATABASE. Necesitará:

  • db_server
  • DB_INSTANCE
  • DB_PORT
  • DB_DATA_FOLDER
  • DB_LOG_FOLDER

Si usted está esperando para utilizar autenticación de SQL podrás, por supuesto, también es necesario pase en DB_USER/DB_PASS

Me gustaría sugiera escribir sus propias acciones personalizadas para verificar los parámetros.

  • ¿Existe el servidor/instancia en la máquina local? Si bien siempre puedes conectarte de forma remota a un servidor SQL e indicarle que instale archivos en una unidad determinada, es más difícil validar previamente cualquier cosa sobre esas unidades.
  • Usando el Servidor/Instancia/Puerto y credenciales dados, puede conectarse al DB maestro del servidor sql, incluso puede verificar el permiso para crear DB por adelantado. Puede salirse con la suya sin utilizar el puerto, pero algunos DBA aún buscan seguridad a través de la oscuridad.
  • ¿Le dieron carpetas de datos/registros válidas? Trayectos enraizados a unidades que realmente existen.
  • También es una buena idea verificar suficiente espacio en la unidad de carpeta de datos/registro. Me he encontrado con un montón de clientes que no controlan y terminan con sus archivos de datos en la pequeña unidad C: con una enorme unidad de datos D: vacía. Yo suelo hacer una combinación de espacio libre mínimo, así como porcentaje libre mínimo (por ejemplo, espacio de al menos 25% libre en el disco)
0

Ampliando la respuesta de Yan, hay una sintaxis muy sencilla si se utiliza la extensión SQL - Es necesario tanto MDF como LDF (archivos Data + Log) incluidos para su base de datos SQL, pero luego adjúntelos haciendo referencia al mismo nombre de archivo.

El siguiente supone un SQL Server Express será instalado localmente bajo el ejemplo localhost \ sqlexpress

<Property Id="SQLINSTANCE" Value="SQLEXPRESS" /> 
<Property Id="SQLSERVER" Value="LOCALHOST" />  
<Property Id="DATA_FOLDER" Value="C:\Program Files\Microsoft SQL Server\MSSQL11.SQLExpress\MSSQL\DATA\" /> 

<Component Id="Sql_Database_Deploy" NeverOverwrite="yes" Directory="[DATA_FOLDER]"> 
    <File Source="Northwind.mdf"></File> 
    <File Source="Northwind)log.ldf"></File> 
    <sql:SqlDatabase Id="SqlDatabase" Database="Northwind" Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes" DropOnUninstall="yes"> 
     <sql:SqlFileSpec Filename="[DATA_FOLDER]Northwind.mdf" Id="Northwind_SqlFileSpec"/> 
     <sql:SqlLogFileSpec Filename="[DATA_FOLDER]Northwind_log.ldf" Id="Northwind_SqlLogFileSpec"/> 
    </sql:SqlDatabase> 
    </Component> 

he omitido la autenticación de este ejemplo por razones de brevedad, pero también se puede especificar un usuario de SQL use para el comando usando el elemento User, y haciendo referencia al ID del elemento del usuario dentro del atributo SqlDatabase.

Cuestiones relacionadas