Discussion:
Proyecto de Implementacion de Aplicacion con Base de datos
(demasiado antiguo para responder)
LuisMiguel
2006-09-06 08:19:31 UTC
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
Jesús López
2006-09-06 13:16:01 UTC
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Saludos:

Jesús López
Post by LuisMiguel
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
LuisMiguel
2006-09-06 18:37:55 UTC
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
Post by Jesús López
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Jesús López
Post by LuisMiguel
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
Jesús López
2006-09-06 20:43:32 UTC
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/msdn/articulos/archivo/300106/voices/emsqlexcustapp.mspx

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

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/custom_pkg.asp

Saludos:

Jesús López
Post by LuisMiguel
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
Post by Jesús López
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Jesús López
Post by LuisMiguel
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
LuisMiguel
2006-09-07 07:39:10 UTC
Buenas
1000 gracias por tu tiempo
voy a ponerme con ello
ya te contare
--
Suerte
LuisMiguel
Post by Jesús López
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
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
(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
(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
http://www.microsoft.com/spanish/msdn/articulos/archivo/300106/voices/emsqlexcustapp.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/custom_pkg.asp
Jesús López
Post by LuisMiguel
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
Post by Jesús López
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Jesús López
Post by LuisMiguel
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
aydai@newsgroups.nospam
2006-09-08 07:12:22 UTC
Te debo un jamon Jesus
Post by LuisMiguel
Buenas
1000 gracias por tu tiempo
voy a ponerme con ello
ya te contare
--
Suerte
LuisMiguel
Post by Jesús López
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
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
(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
(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
http://www.microsoft.com/spanish/msdn/articulos/archivo/300106/voices/emsqlexcustapp.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/custom_pkg.asp
Jesús López
Post by LuisMiguel
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
Post by Jesús López
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Jesús López
Post by LuisMiguel
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
LuisMiguel
2006-09-09 11:52:43 UTC
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
Post by Jesús López
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
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
(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
(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
http://www.microsoft.com/spanish/msdn/articulos/archivo/300106/voices/emsqlexcustapp.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/custom_pkg.asp
Jesús López
Post by LuisMiguel
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
Post by Jesús López
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Jesús López
Post by LuisMiguel
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
Jesús López
2006-09-11 08:47:01 UTC
Según la documentación:

http://msdn2.microsoft.com/en-us/library/kk9888ea.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
Post by LuisMiguel
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
Post by Jesús López
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
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
(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
(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
http://www.microsoft.com/spanish/msdn/articulos/archivo/300106/voices/emsqlexcustapp.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/custom_pkg.asp
Jesús López
Post by LuisMiguel
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
Post by Jesús López
http://msdn2.microsoft.com/en-us/library/49b92ztk.aspx
--
Jesús López
Post by LuisMiguel
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
Jesús López
2006-09-12 12:43:01 UTC
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
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
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.
- 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
" & _
"_Data.mdf'," & _
"_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 size=4096"
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
LuisMiguel
2006-09-12 15:00:03 UTC
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
--> Referencia a objeto no establecida como instancia de un objeto.

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
Post by Jesús López
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
(1) Tienen el atributo de sólo lectura activado.
(2) SQL Server Express no tiene permiso para modificar esos archivos.
(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\*
(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.
--
Jesús López
Solid Quality Learning
www.solidqualitylearning.com
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
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.
- 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
" & _
"_Data.mdf'," & _
"_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 size=4096"
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
Jesús López
2006-09-12 16:43:07 UTC
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
Post by LuisMiguel
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
--> Referencia a objeto no establecida como instancia de un objeto.
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
Post by Jesús López
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
(1) Tienen el atributo de sólo lectura activado.
(2) SQL Server Express no tiene permiso para modificar esos archivos.
(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\*
(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.
--
Jesús López
Solid Quality Learning
www.solidqualitylearning.com
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
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.
- 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
" & _
"_Data.mdf'," & _
"_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 size=4096"
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
LuisMiguel
2006-09-13 07:42:56 UTC
Buenas.
Esto ya pinta mejor.
Me funciona ya todo correctamente en el equipo de desarrollo, el error que
tenia, era una mala lectura de la clave del registro (un dia perdido por esa
tonteria). ¿no hay forma de depurar una clase de instalador?
Bueno, ahora lo que me pasa (espero que sea lo ultimo) es que verificando su
funcionamiento en otro equipo, me da un error que me dice que no encuentra
el archivo Pruebas.dll (la clase del instalador), es como si la buscara en
el mismo camino que en el equipo de desarrollo,
¿sabes a que puede ser debido?

Gracias por tu tiempo y tu paciencia
--
Gracias
LuisMiguel
LuisMiguel
2006-09-13 08:33:33 UTC
El error exacto que me da es : no se pudo encontrar Pruebas.InstallState
y el el fichero temporal que me queda, veo una referencia al archivo
Pruebas.pdb con el camino del equipo de desarrollo
--
LuisMiguel
Post by LuisMiguel
Buenas.
Esto ya pinta mejor.
Me funciona ya todo correctamente en el equipo de desarrollo, el error que
tenia, era una mala lectura de la clave del registro (un dia perdido por
esa tonteria). ¿no hay forma de depurar una clase de instalador?
Bueno, ahora lo que me pasa (espero que sea lo ultimo) es que verificando
su funcionamiento en otro equipo, me da un error que me dice que no
encuentra el archivo Pruebas.dll (la clase del instalador), es como si la
buscara en el mismo camino que en el equipo de desarrollo,
¿sabes a que puede ser debido?
Gracias por tu tiempo y tu paciencia
--
Gracias
LuisMiguel
Jesús López
2006-09-13 09:36:02 UTC
Yo cambiaría la configuración de la solución de "Debug" a "Release" e
instalaría la versión release en los equipos.

También me aseguraría de que el resultado principal del proyecto Prueba.dll
(donde está la clase del instalador) la incluyo en "Application Folder" de
"File System on Target Machine" en el "File System Editor" del proyecto de
instalación.
--
Saludos:

Jesús López
MVP VB
Solid Quality Learning
www.solidqualitylearning.com
Post by LuisMiguel
El error exacto que me da es : no se pudo encontrar Pruebas.InstallState
y el el fichero temporal que me queda, veo una referencia al archivo
Pruebas.pdb con el camino del equipo de desarrollo
--
LuisMiguel
Post by LuisMiguel
Buenas.
Esto ya pinta mejor.
Me funciona ya todo correctamente en el equipo de desarrollo, el error que
tenia, era una mala lectura de la clave del registro (un dia perdido por
esa tonteria). ¿no hay forma de depurar una clase de instalador?
Bueno, ahora lo que me pasa (espero que sea lo ultimo) es que verificando
su funcionamiento en otro equipo, me da un error que me dice que no
encuentra el archivo Pruebas.dll (la clase del instalador), es como si la
buscara en el mismo camino que en el equipo de desarrollo,
¿sabes a que puede ser debido?
Gracias por tu tiempo y tu paciencia
--
Gracias
LuisMiguel
LuisMiguel
2006-09-13 10:48:19 UTC
Buenas
Tras muchos sudores, parece que esto funciona ya.
Sigo teniendo el problema de la base de datos de solo lectura, pero mirare
si instale el SLQEXPRESS correctamente.
Lo demas funciona OK.
Bueno, como te decia en el mensaje anterior, gracias por tu tiempo y
paciencia.
Si alguna vez vienes por Murcia hazmelo saber y te debo una comida.
Un abrazo
--
Suerte
LuisMiguel
Jesús López
2006-09-13 09:29:02 UTC
Luis Miguel,

La verdad es que nunca he tenido la necesidad de depurar una clase Installer
y nunca lo había intentado hasta ahora. Pero ya que lo preguntas me he dicho
"intentémoslo a ver si lo consigo" y efectivamente, he logrado depurarla.

Mis objetivos eran:
(1) Que se produzca una interrupción cada vez que se lance una excepción
independientemente de si esa excepción esté gestionada o no. Así podría ver
al menos la pila de llamadas e inspeccionar el valor de las variables.

(2) Hacer funcionar los puntos de interrupción

Para el primer objetivo he hecho lo siguiente:
(1) Añadir la opción "Exceptions.." al menú "Debug". Para ello:
1.1 Ir a Tools->Customize en el menú de Visual Studio
1.2 Arrastrar el comando "Exceptions.." de la categoría "Debug"
al menú "Debug"
(2) Seleccionar Exceptions del menú Debug. y activar la casilla "Thrown" de
"Common Language Runtime Exceptions".


Para el segundo objetivo. Que funcionen las interrupciones, sean puntos de
interrupción definidos por el usuario o causados por una excepción, hay que
anexar el depurador al proceso de instalación. Pero es difícil hacer esto
cuando el proceso aún no ha cargado el CLR. Así que he añadido un MsgBox en
el constructor de la clase Installer para tener la oportunidad de anexar el
depurador al proceso de instalación, estando seguro de que ya se ha cargado
el CLR y de que tengo tiempo suficiente para hacerlo:


Public Class DatabaseInstaller

Public Sub New()
MyBase.New()
MsgBox("Debug -> Attach to process")
'This call is required by the Component Designer.
InitializeComponent()

'Add initialization code after the call to InitializeComponent

End Sub

........

End Class


Una vez hecho esto:

(1) genero el proyecto de instalación
(2) Pulso con el botón derecho del ratón en el proyecto de instalación y
eligo "Install"
(3) Cuando me sale el msgbox "Debug->Attach to process", sin pulsar
"Aceptar" me voy a Visual Studio y anexo el depurador al proceso de
instalación:
3.1 Elijo del menú "Debug" la opción "Attach to process"
3.2 En los procesos disponibles hay varias instancias de msiexec.
Elijo aquella cuyo tipo sea "Managed,x86" y pulso "Attach"
(4) Ahora pongo los puntos de interrupción que quiera que funcionará
y cuando se produzca una excepción se parará y podré ver la pila
de llamadas.
--
Saludos:

Jesús López
Solid Quality Mentors
www.solidqualitylearning.com
Post by LuisMiguel
Buenas.
Esto ya pinta mejor.
Me funciona ya todo correctamente en el equipo de desarrollo, el error que
tenia, era una mala lectura de la clave del registro (un dia perdido por esa
tonteria). ¿no hay forma de depurar una clase de instalador?
Bueno, ahora lo que me pasa (espero que sea lo ultimo) es que verificando su
funcionamiento en otro equipo, me da un error que me dice que no encuentra
el archivo Pruebas.dll (la clase del instalador), es como si la buscara en
el mismo camino que en el equipo de desarrollo,
¿sabes a que puede ser debido?
Gracias por tu tiempo y tu paciencia
--
Gracias
LuisMiguel