Proyecto de Implementacion de Aplicacion con Base de datos

06/09/2006 - 10:19 por LuisMiguel | Informe spam
Buenas
Utilizo VbNet2005 y SQLExpress.
Podiais indicarme algun link donde se explique un proyecto de implementacion
con la opcion de crear/adjuntar una base de datos en el equipo donde se
instale.

Gracias
LuisMiguel

Preguntas similare

Leer las respuestas

#6 LuisMiguel
09/09/2006 - 13:52 | Informe spam
Buenas
Comentarte que ya casi todo funciona (me quedan unos problemas con las base
de datos, pero intentare solucionarlos)
Abusando de tu tiempo, ¿me podrias decir como puedo saber la carpeta que ha
seleccionado el usuario para instalar la aplicacion?

Gracias de nuevo

LuisMiguel
"Jesús López" escribió en el mensaje
news:
Si instalas SQL Express como prerequisito de la aplicación, ya que SQL
Server 2005 Express se instala de forma predeterminada como una instancia
con nombre SQLEXPRESS, la cadena de conexión a master desde la máquina
local podría ser cualquiera de las siguientes:

Data Source=(local)\SQLEXPRESS;Integrated Security=SSPI;Initial
Catalog=master
Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=master
Data Source=localhost\SQLEXPRESS;Integrated Security=SSPI;Initial
Catalog=master

Para parametrizar la instalación de SQL Server 2005 Express sería
necesario crear un nuevo "bootstrapper manifest" personalizado para SQL
Express. Este manifiesto podrías crearlo copiando el existente y
modificándolo. Estos serían los pasos a seguir:

(1) Copiar el directorio "C:\Archivos de programa\Microsoft Visual Studio
8\SDK\v2.0\BootStrapper\Packages\SqlExpress" a "C:\Archivos de
programa\Microsoft Visual Studio
8\SDK\v2.0\BootStrapper\Packages\CustomSqlExpress"

(2) En el directorio CustomSqlExpress modifica el archivo product.xml.
Done pone "Microsoft.Sql.Server.Express.1.0" puedes poner otra cosa como
"Custom.Sql.Server.Express.1.0"

(3) En el directorio CustomSqlExpress/en (si tienes la versión en inglés
de VS) o en el directorio CustomSqlExpress/es (si tienes la versión en
español), modifica el archivo package.xml:
(a) donde pone <String Name="DisplayName">SQL Server 2005 Express
Edition</String> pones algo como <String Name="DisplayName">Custom SQL
Server 2005 Express Edition</String>
(b) modifica a tu gusto los parámetros de instalación de SQL Express.
En lugar de Arguments="-q /norebootchk /qn reboot=ReallySuppress
addlocal=all instancename=SQLEXPRESS SQLAUTOSTART=1", podrías poner
Arguments="-q /norebootchk /qn reboot=ReallySuppress addlocal=all
instancename=CUSTOMINSTANCE SQLAUTOSTART=1"

(4) Crea tu propio SqlExpressChk.exe para que devuelva un código de salida
que informe de si existe o no una instancia SQL Server 2005 Express
llamada CUSTOMINSTANCE o como quiera que la llames.

(4) En la ventana de prerequisitos de tu proyecto de instalación o
clickonce te aparecerá ahora una nueva opción llamada "Custom SQL Server
2005 Express Edition" (el DisplayName de antes)

Creo que no te vendría mal leer a cerca de la personalización de la
instalación de SQL Server Express:

http://www.microsoft.com/spanish/ms...stapp.mspx

Y Sobre la creación de bootstrappers personalizados en Visual Studio
2005:

http://msdn.microsoft.com/library/d...om_pkg.asp

Saludos:

Jesús López



"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:uwO%
Gracias.
Precisamente estaba peleandome con ese ejemplo, tengo dos pegas.
Instalo el SQl Express como prerequisito de la aplicacion, como se la
cadena de conexion master?
Y como puedo parametrizar la instalacion del SQL Express? (creo que con
esto se solucionaria lo anterior)

De nuevo gracias por tu tiempo
LuisMiguel
"Jesús López" escribió en el mensaje
news:
http://msdn2.microsoft.com/en-us/li...92ztk.aspx


Saludos:

Jesús López



"LuisMiguel" escribió:

Buenas
Utilizo VbNet2005 y SQLExpress.
Podiais indicarme algun link donde se explique un proyecto de
implementacion
con la opcion de crear/adjuntar una base de datos en el equipo donde se
instale.

Gracias
LuisMiguel

















Respuesta Responder a este mensaje
#7 Jesús López
11/09/2006 - 10:47 | Informe spam
Según la documentación:

http://msdn2.microsoft.com/en-us/li...888ea.aspx

La carpeta de instalación se guarda en la propiedad Windows Installer
"[TARGETDIR]". Esta propiedad está disponible sólo dentro del proceso de
installación, es decir, mientras se está ejecutando el MSI. Lo cual quiere
decir que puede referenciarse desde dentro del proyecto de instalación.

Para hacer la carpeta de instalación globalmente disponible, lo que se suele
hacer es guardarla en el registro de windows. Típicamente en la clave:
HKEY_LOCAL_MACHINE\Software\MyCompany\MyApp, se guarda en el valor
"InstallPath". Para hacer esto:

(1) abre el editor de registro en el proyecto de instalación,
(2) Crea la clave HKEY_LOCAL_MACHINE\Software\MyCompany\MyApp
(3) Añade un "String Value" llamado InstallPath
(4) En la ventana de propiedades establece la propiedad Value de InstallPath
a [TARGETDIR]

De esta manera podrás saber la ruta de instalación leyendo el valor
HKEY_LOCAL_MACHINE\Software\MyCompany\MyApp\InstallPath del registro de
windows.

Saludos:

Jesús López



"LuisMiguel" wrote:

Buenas
Comentarte que ya casi todo funciona (me quedan unos problemas con las base
de datos, pero intentare solucionarlos)
Abusando de tu tiempo, ¿me podrias decir como puedo saber la carpeta que ha
seleccionado el usuario para instalar la aplicacion?

Gracias de nuevo

LuisMiguel
"Jesús López" escribió en el mensaje
news:
> Si instalas SQL Express como prerequisito de la aplicación, ya que SQL
> Server 2005 Express se instala de forma predeterminada como una instancia
> con nombre SQLEXPRESS, la cadena de conexión a master desde la máquina
> local podría ser cualquiera de las siguientes:
>
> Data Source=(local)\SQLEXPRESS;Integrated Security=SSPI;Initial
> Catalog=master
> Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=master
> Data Source=localhost\SQLEXPRESS;Integrated Security=SSPI;Initial
> Catalog=master
>
> Para parametrizar la instalación de SQL Server 2005 Express sería
> necesario crear un nuevo "bootstrapper manifest" personalizado para SQL
> Express. Este manifiesto podrías crearlo copiando el existente y
> modificándolo. Estos serían los pasos a seguir:
>
> (1) Copiar el directorio "C:\Archivos de programa\Microsoft Visual Studio
> 8\SDK\v2.0\BootStrapper\Packages\SqlExpress" a "C:\Archivos de
> programa\Microsoft Visual Studio
> 8\SDK\v2.0\BootStrapper\Packages\CustomSqlExpress"
>
> (2) En el directorio CustomSqlExpress modifica el archivo product.xml.
> Done pone "Microsoft.Sql.Server.Express.1.0" puedes poner otra cosa como
> "Custom.Sql.Server.Express.1.0"
>
> (3) En el directorio CustomSqlExpress/en (si tienes la versión en inglés
> de VS) o en el directorio CustomSqlExpress/es (si tienes la versión en
> español), modifica el archivo package.xml:
> (a) donde pone <String Name="DisplayName">SQL Server 2005 Express
> Edition</String> pones algo como <String Name="DisplayName">Custom SQL
> Server 2005 Express Edition</String>
> (b) modifica a tu gusto los parámetros de instalación de SQL Express.
> En lugar de Arguments="-q /norebootchk /qn reboot=ReallySuppress
> addlocal=all instancename=SQLEXPRESS SQLAUTOSTART=1", podrías poner
> Arguments="-q /norebootchk /qn reboot=ReallySuppress addlocal=all
> instancename=CUSTOMINSTANCE SQLAUTOSTART=1"
>
> (4) Crea tu propio SqlExpressChk.exe para que devuelva un código de salida
> que informe de si existe o no una instancia SQL Server 2005 Express
> llamada CUSTOMINSTANCE o como quiera que la llames.
>
> (4) En la ventana de prerequisitos de tu proyecto de instalación o
> clickonce te aparecerá ahora una nueva opción llamada "Custom SQL Server
> 2005 Express Edition" (el DisplayName de antes)
>
> Creo que no te vendría mal leer a cerca de la personalización de la
> instalación de SQL Server Express:
>
> http://www.microsoft.com/spanish/ms...stapp.mspx
>
> Y Sobre la creación de bootstrappers personalizados en Visual Studio
> 2005:
>
> http://msdn.microsoft.com/library/d...om_pkg.asp
>
> Saludos:
>
> Jesús López
>
>
>
> "LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
> news:uwO%
>> Gracias.
>> Precisamente estaba peleandome con ese ejemplo, tengo dos pegas.
>> Instalo el SQl Express como prerequisito de la aplicacion, como se la
>> cadena de conexion master?
>> Y como puedo parametrizar la instalacion del SQL Express? (creo que con
>> esto se solucionaria lo anterior)
>>
>> De nuevo gracias por tu tiempo
>> LuisMiguel
>> "Jesús López" escribió en el mensaje
>> news:
>>> http://msdn2.microsoft.com/en-us/li...92ztk.aspx
>>>
>>>
>>> Saludos:
>>>
>>> Jesús López
>>>
>>>
>>>
>>> "LuisMiguel" escribió:
>>>
>>>> Buenas
>>>> Utilizo VbNet2005 y SQLExpress.
>>>> Podiais indicarme algun link donde se explique un proyecto de
>>>> implementacion
>>>> con la opcion de crear/adjuntar una base de datos en el equipo donde se
>>>> instale.
>>>>
>>>> Gracias
>>>> LuisMiguel
>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>>
>
>
>




Respuesta Responder a este mensaje
#8 Jesús López
12/09/2006 - 14:43 | Informe spam
Luis Miguel,

Estoy respondiendo a través de http://support.microsoft.com/newsgroups, así
que no puedo ver el error adjunto.


Del error que te da sp_attach_db se deduce que para SQL Server Express, los
archivos de la base de datos son de sólo lectura. Esto sólo puede ser debido
a dos cosas:

(1) Tienen el atributo de sólo lectura activado.
(2) SQL Server Express no tiene permiso para modificar esos archivos.

Lo más probable es que sea lo segundo porque:

(1) En Windows XP, SQL Server Express se ejecuta bajo la cuenta
NetworkService.
(2) La cuenta NetworkService no tiene permisos para modificar los archivos
que están en C:\Archivos de programa\*

Tienes las siguientes alternativas para solucionar el problema:

(1) Instalar los archivos de base de datos en el directorio predeterminado
de datos de SQL Server express. Típicamente es algo como. C:\Archivos de
programa\Microsoft SQL Server\MSSQL.4\MSSQL\Data. La ruta exacta puede
obtenerse concatenando el valor del registro SQLPath de la clave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\Setup
con "\Data".

(2) Instalar SQL Server Express de manera que se ejecute bajo una cuenta con
suficientes privilegios como LocalSystem. Esto puede hacerse pasándole el
parámetro /SQLACCOUNT=LocalSystem al programa de instalación de SQL Server
Express

(3) Concecer permiso a NetworkService para modificar los archivos de la base
de datos.


Saludos:

Jesús López
Solid Quality Learning
www.solidqualitylearning.com



"LuisMiguel" wrote:

Buenas (por decir algo)
Te cuento como llevo el tema.
Despues de tus indicaciones, consigo instalar el SQLEXPRESS correctamente y
almaceno en una clave del registro el path de la instalacion.

Primeramente, consegui con una clase de instalador, ejecutar un comando que
pretendia adjuntar una BD as servidor instalado, me generaba un error :

La base de datos Socios (la que intentaba instalar) no se puede actualizar
porque es de solo lectura o tiene archivos de solo lectura. Permita el aceso
de escritura a la base de datos o los archivos y vuelva a ejecutar la
recuperacion (error 3415)

La base de datos tiene todos los permisos y estoy atorado con esto.

Despues de muchas pruebas y cambios (añadi la escritura del registro) no se
que he podido hacer que ahora no consigo siquiera que se ejecute la clase
del instalador, me genera el error que adjunto.

Lo unico que tengo en el proyecto es:
- Una ventana que me pide el nombre de la base de datos a adjuntar.
- Una accion personalizada
- y la escritura en el registro.

Bueno, perdonar por el rollo, pero asi, tambien me sirve a mi para
recapacitar.

Bueno, si habeis llegado hasta aqui, adjunto el codigo de la clase del
instalador, por si quereis ojearla.

-
Imports System.ComponentModel

Imports System.Configuration.Install



Public Class ClsInstalacion

Private cStCadConexion As String

Private StServidor As String = "(local)\SQLEXPRESS"

Private Acceso As String = "MICLAVE"

Private StCamino As String =
My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\LM\CN", _

"InstallPath",
Nothing).ToString



Private Sub ModificarCFG()

Dim stcfg As String = stcamino & "CN.exe.config"

Dim reader As System.IO.StreamReader = New
System.IO.StreamReader(stcfg)

Dim cfg As New System.Text.StringBuilder

cfg.Append(reader.ReadToEnd)

cfg.Replace("C_RPT", StCamino)

'Escribo el Archivo Modificado

Dim oLPT1 As System.IO.FileStream

'Hacia Archivo

Dim F As System.IO.StreamWriter

oLPT1 = New System.IO.FileStream(stcfg, IO.FileMode.Truncate)

F = New System.IO.StreamWriter(oLPT1, _

System.Text.Encoding.UTF8) '(437)) 'Unicode)

F.AutoFlush = True

F.WriteLine(cfg.ToString)

F.Close()

End Sub



Private Sub AdjuntarBD(ByVal StNombreBD As String)

Dim lStCopia As String

lStCopia = "execute sp_attach_db @dbname = '" & StNombreBD & "',
" & _

"@filename1 = '" & StCamino & "DatosSql\" & StNombreBD &
"_Data.mdf'," & _

" @filename2 = '" & StCamino & "DatosSql\" & StNombreBD &
"_Log.ldf'"

Dim Comando As New SqlClient.SqlCommand(lStCopia, New
SqlClient.SqlConnection(CadenaConexionMaster))

Comando.Connection.Open()

Try

Comando.ExecuteNonQuery()

MsgBox("Adjuntada la Base de datos " & StNombreBD & ",
Correctamente", _

MsgBoxStyle.Information)

Catch SqlError As Exception

MsgBox(SqlError.Message)

Finally

Comando.Connection.Close()

End Try

End Sub



Public ReadOnly Property CadenaConexionMaster() As String

Get

cStCadConexion = "data source=" & StServidor & ";" & _

"initial catalog=master;password='MICLAVE';" & _

"persist security info=True;" & _

"user id=sa;packet "

Return cStCadConexion

End Get

End Property



Public Sub New()

MyBase.New()



'El Diseñador de componentes requiere esta llamada.

InitializeComponent()



'Agregue el código de inicialización después de llamar a
InitializeComponent



End Sub

Public Overrides Sub Install(ByVal stateSaver As
System.Collections.IDictionary)



MyBase.Install(stateSaver)

AdjuntarBD(Me.Context.Parameters.Item("dbname"))

ModificarCFG()

End Sub



End Class




Se agradece cualquier indicacion, sugerencia, etc
Gracias anticipadas

LuisMiguel



Respuesta Responder a este mensaje
#9 LuisMiguel
12/09/2006 - 17:00 | Informe spam
Buenas.
Voy a cambiar la instalacion de SQLExpress.
La pega que tengo ahora, es que no consigo ejecutar la clase del instalador.
me da el error

No se puede crear una instancia del tipo de instalador ClsInstalacion --> Se
produjo una excepcion en el destino de la invocacion

y cancela la instalacion.

Los pasos que he seguido han sido
Crear la clase del instalador, con un codigo parecido al del correo anterior
(ya hice mil cambios)
Añadir el resultado al proyecto de instalacion
Añadirle esta clase como accion personalizada al instalar.

¿que falta?

Gracias

Suerte
LuisMiguel
"Jesús López" escribió en el mensaje
news:

Luis Miguel,

Estoy respondiendo a través de http://support.microsoft.com/newsgroups,
así
que no puedo ver el error adjunto.


Del error que te da sp_attach_db se deduce que para SQL Server Express,
los
archivos de la base de datos son de sólo lectura. Esto sólo puede ser
debido
a dos cosas:

(1) Tienen el atributo de sólo lectura activado.
(2) SQL Server Express no tiene permiso para modificar esos archivos.

Lo más probable es que sea lo segundo porque:

(1) En Windows XP, SQL Server Express se ejecuta bajo la cuenta
NetworkService.
(2) La cuenta NetworkService no tiene permisos para modificar los archivos
que están en C:\Archivos de programa\*

Tienes las siguientes alternativas para solucionar el problema:

(1) Instalar los archivos de base de datos en el directorio predeterminado
de datos de SQL Server express. Típicamente es algo como. C:\Archivos de
programa\Microsoft SQL Server\MSSQL.4\MSSQL\Data. La ruta exacta puede
obtenerse concatenando el valor del registro SQLPath de la clave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\SQLEXPRESS\Setup
con "\Data".

(2) Instalar SQL Server Express de manera que se ejecute bajo una cuenta
con
suficientes privilegios como LocalSystem. Esto puede hacerse pasándole el
parámetro /SQLACCOUNT=LocalSystem al programa de instalación de SQL Server
Express

(3) Concecer permiso a NetworkService para modificar los archivos de la
base
de datos.


Saludos:

Jesús López
Solid Quality Learning
www.solidqualitylearning.com



"LuisMiguel" wrote:

Buenas (por decir algo)
Te cuento como llevo el tema.
Despues de tus indicaciones, consigo instalar el SQLEXPRESS correctamente
y
almaceno en una clave del registro el path de la instalacion.

Primeramente, consegui con una clase de instalador, ejecutar un comando
que
pretendia adjuntar una BD as servidor instalado, me generaba un error :

La base de datos Socios (la que intentaba instalar) no se puede
actualizar
porque es de solo lectura o tiene archivos de solo lectura. Permita el
aceso
de escritura a la base de datos o los archivos y vuelva a ejecutar la
recuperacion (error 3415)

La base de datos tiene todos los permisos y estoy atorado con esto.

Despues de muchas pruebas y cambios (añadi la escritura del registro) no
se
que he podido hacer que ahora no consigo siquiera que se ejecute la clase
del instalador, me genera el error que adjunto.

Lo unico que tengo en el proyecto es:
- Una ventana que me pide el nombre de la base de datos a adjuntar.
- Una accion personalizada
- y la escritura en el registro.

Bueno, perdonar por el rollo, pero asi, tambien me sirve a mi para
recapacitar.

Bueno, si habeis llegado hasta aqui, adjunto el codigo de la clase del
instalador, por si quereis ojearla.

-
Imports System.ComponentModel

Imports System.Configuration.Install



Public Class ClsInstalacion

Private cStCadConexion As String

Private StServidor As String = "(local)\SQLEXPRESS"

Private Acceso As String = "MICLAVE"

Private StCamino As String >> My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\LM\CN", _


"InstallPath",
Nothing).ToString



Private Sub ModificarCFG()

Dim stcfg As String = stcamino & "CN.exe.config"

Dim reader As System.IO.StreamReader = New
System.IO.StreamReader(stcfg)

Dim cfg As New System.Text.StringBuilder

cfg.Append(reader.ReadToEnd)

cfg.Replace("C_RPT", StCamino)

'Escribo el Archivo Modificado

Dim oLPT1 As System.IO.FileStream

'Hacia Archivo

Dim F As System.IO.StreamWriter

oLPT1 = New System.IO.FileStream(stcfg, IO.FileMode.Truncate)

F = New System.IO.StreamWriter(oLPT1, _

System.Text.Encoding.UTF8) '(437)) 'Unicode)

F.AutoFlush = True

F.WriteLine(cfg.ToString)

F.Close()

End Sub



Private Sub AdjuntarBD(ByVal StNombreBD As String)

Dim lStCopia As String

lStCopia = "execute sp_attach_db @dbname = '" & StNombreBD &
"',
" & _

"@filename1 = '" & StCamino & "DatosSql\" & StNombreBD &
"_Data.mdf'," & _

" @filename2 = '" & StCamino & "DatosSql\" & StNombreBD &
"_Log.ldf'"

Dim Comando As New SqlClient.SqlCommand(lStCopia, New
SqlClient.SqlConnection(CadenaConexionMaster))

Comando.Connection.Open()

Try

Comando.ExecuteNonQuery()

MsgBox("Adjuntada la Base de datos " & StNombreBD & ",
Correctamente", _

MsgBoxStyle.Information)

Catch SqlError As Exception

MsgBox(SqlError.Message)

Finally

Comando.Connection.Close()

End Try

End Sub



Public ReadOnly Property CadenaConexionMaster() As String

Get

cStCadConexion = "data source=" & StServidor & ";" & _

"initial catalog=master;password='MICLAVE';" & _

"persist security info=True;" & _

"user id=sa;packet "

Return cStCadConexion

End Get

End Property



Public Sub New()

MyBase.New()



'El Diseñador de componentes requiere esta llamada.

InitializeComponent()



'Agregue el código de inicialización después de llamar a
InitializeComponent



End Sub

Public Overrides Sub Install(ByVal stateSaver As
System.Collections.IDictionary)



MyBase.Install(stateSaver)

AdjuntarBD(Me.Context.Parameters.Item("dbname"))

ModificarCFG()

End Sub



End Class




Se agradece cualquier indicacion, sugerencia, etc
Gracias anticipadas

LuisMiguel






Respuesta Responder a este mensaje
#10 Jesús López
12/09/2006 - 18:43 | Informe spam
Faltar no falta nada, sólo que tienes que averiguar qué es lo que produce
el error porque yo no lo veo en el código que has enviado. Para ello te
aconsejo lo siguiente:

(1) Quita la acción personalizada:
(2) Quita la clase de instalador
(3) Añade una clase de instalador
(4) Añade la acción personalizada
(5) Vé añadiendo funcionalidad a la clase del instalador poco a poco,
probando cada vez. Si te da error, ya sabes que lo último que añadiste fue
lo que provocó el error.

Saludos:

Jesús López



"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:uHf$
Buenas.
Voy a cambiar la instalacion de SQLExpress.
La pega que tengo ahora, es que no consigo ejecutar la clase del
instalador. me da el error

No se puede crear una instancia del tipo de instalador ClsInstalacion -->
Se produjo una excepcion en el destino de la invocacion

y cancela la instalacion.

Los pasos que he seguido han sido
Crear la clase del instalador, con un codigo parecido al del correo
anterior (ya hice mil cambios)
Añadir el resultado al proyecto de instalacion
Añadirle esta clase como accion personalizada al instalar.

¿que falta?

Gracias

Suerte
LuisMiguel
"Jesús López" escribió en el mensaje
news:

Luis Miguel,

Estoy respondiendo a través de http://support.microsoft.com/newsgroups,
así
que no puedo ver el error adjunto.


Del error que te da sp_attach_db se deduce que para SQL Server Express,
los
archivos de la base de datos son de sólo lectura. Esto sólo puede ser
debido
a dos cosas:

(1) Tienen el atributo de sólo lectura activado.
(2) SQL Server Express no tiene permiso para modificar esos archivos.

Lo más probable es que sea lo segundo porque:

(1) En Windows XP, SQL Server Express se ejecuta bajo la cuenta
NetworkService.
(2) La cuenta NetworkService no tiene permisos para modificar los
archivos
que están en C:\Archivos de programa\*

Tienes las siguientes alternativas para solucionar el problema:

(1) Instalar los archivos de base de datos en el directorio
predeterminado
de datos de SQL Server express. Típicamente es algo como. C:\Archivos de
programa\Microsoft SQL Server\MSSQL.4\MSSQL\Data. La ruta exacta puede
obtenerse concatenando el valor del registro SQLPath de la clave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\SQLEXPRESS\Setup
con "\Data".

(2) Instalar SQL Server Express de manera que se ejecute bajo una cuenta
con
suficientes privilegios como LocalSystem. Esto puede hacerse pasándole el
parámetro /SQLACCOUNT=LocalSystem al programa de instalación de SQL
Server
Express

(3) Concecer permiso a NetworkService para modificar los archivos de la
base
de datos.


Saludos:

Jesús López
Solid Quality Learning
www.solidqualitylearning.com



"LuisMiguel" wrote:

Buenas (por decir algo)
Te cuento como llevo el tema.
Despues de tus indicaciones, consigo instalar el SQLEXPRESS
correctamente y
almaceno en una clave del registro el path de la instalacion.

Primeramente, consegui con una clase de instalador, ejecutar un comando
que
pretendia adjuntar una BD as servidor instalado, me generaba un error :

La base de datos Socios (la que intentaba instalar) no se puede
actualizar
porque es de solo lectura o tiene archivos de solo lectura. Permita el
aceso
de escritura a la base de datos o los archivos y vuelva a ejecutar la
recuperacion (error 3415)

La base de datos tiene todos los permisos y estoy atorado con esto.

Despues de muchas pruebas y cambios (añadi la escritura del registro) no
se
que he podido hacer que ahora no consigo siquiera que se ejecute la
clase
del instalador, me genera el error que adjunto.

Lo unico que tengo en el proyecto es:
- Una ventana que me pide el nombre de la base de datos a adjuntar.
- Una accion personalizada
- y la escritura en el registro.

Bueno, perdonar por el rollo, pero asi, tambien me sirve a mi para
recapacitar.

Bueno, si habeis llegado hasta aqui, adjunto el codigo de la clase del
instalador, por si quereis ojearla.

-
Imports System.ComponentModel

Imports System.Configuration.Install



Public Class ClsInstalacion

Private cStCadConexion As String

Private StServidor As String = "(local)\SQLEXPRESS"

Private Acceso As String = "MICLAVE"

Private StCamino As String >>> My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\LM\CN", _


"InstallPath",
Nothing).ToString



Private Sub ModificarCFG()

Dim stcfg As String = stcamino & "CN.exe.config"

Dim reader As System.IO.StreamReader = New
System.IO.StreamReader(stcfg)

Dim cfg As New System.Text.StringBuilder

cfg.Append(reader.ReadToEnd)

cfg.Replace("C_RPT", StCamino)

'Escribo el Archivo Modificado

Dim oLPT1 As System.IO.FileStream

'Hacia Archivo

Dim F As System.IO.StreamWriter

oLPT1 = New System.IO.FileStream(stcfg, IO.FileMode.Truncate)

F = New System.IO.StreamWriter(oLPT1, _

System.Text.Encoding.UTF8) '(437)) 'Unicode)

F.AutoFlush = True

F.WriteLine(cfg.ToString)

F.Close()

End Sub



Private Sub AdjuntarBD(ByVal StNombreBD As String)

Dim lStCopia As String

lStCopia = "execute sp_attach_db @dbname = '" & StNombreBD &
"',
" & _

"@filename1 = '" & StCamino & "DatosSql\" & StNombreBD &
"_Data.mdf'," & _

" @filename2 = '" & StCamino & "DatosSql\" & StNombreBD &
"_Log.ldf'"

Dim Comando As New SqlClient.SqlCommand(lStCopia, New
SqlClient.SqlConnection(CadenaConexionMaster))

Comando.Connection.Open()

Try

Comando.ExecuteNonQuery()

MsgBox("Adjuntada la Base de datos " & StNombreBD & ",
Correctamente", _

MsgBoxStyle.Information)

Catch SqlError As Exception

MsgBox(SqlError.Message)

Finally

Comando.Connection.Close()

End Try

End Sub



Public ReadOnly Property CadenaConexionMaster() As String

Get

cStCadConexion = "data source=" & StServidor & ";" & _

"initial catalog=master;password='MICLAVE';" & _

"persist security info=True;" & _

"user id=sa;packet "

Return cStCadConexion

End Get

End Property



Public Sub New()

MyBase.New()



'El Diseñador de componentes requiere esta llamada.

InitializeComponent()



'Agregue el código de inicialización después de llamar a
InitializeComponent



End Sub

Public Overrides Sub Install(ByVal stateSaver As
System.Collections.IDictionary)



MyBase.Install(stateSaver)

AdjuntarBD(Me.Context.Parameters.Item("dbname"))

ModificarCFG()

End Sub



End Class




Se agradece cualquier indicacion, sugerencia, etc
Gracias anticipadas

LuisMiguel











Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida