Que bueno! yo también tengo un proyecto en 3 capas, pero no le he
metido de lleno. Veo que vas a trabajar con esto, y como yo también
estaré en eso en unas semanas, creo que podemos colaborar de cerca.
Aquí te mando un codigo que hice para automatizar la generación del
componente y su registro. Modifícalo según tus parámetros, te
automatiza la creación del dll y la aplicacion com:
Aquí podrás ver como usar el objeto comadmin desde VFP..
Saludos
Marco Plaza
*-------------------------------------------------------
* Programa Creado por Marco A. Plaza
* se permite su uso y modificación
* remitir mejoras a
plaza...@hotmail.com
* Caracas - Venezuela
*------------------------------------------------------
NombreAplicaciónCom = 'COMAPP'
DLLnom = 'X:\WWW\SERVLOCAL\MPFOXISAPI\MPFOXISAPI.DLL'
proyecto = 'X:\VFP\PROYECTOS\MPFOXISAPI\MPFOXISAPI.PJX'
DO ApagarComApp
DO CrearDll
Do BorrarComApp
DO CrearComApp
DO listarUsuarios
do exportarApp
*-------------------------------------------
procedure ApagarComApp
*-------------------------------------------
oComadmin = Createobject("ComAdmin.COMAdminCatalog")
oComadmin.shutdownapplication(NombreAplicacionCom)
oComadmin = .Null.
*-----------------------------------------------------
Procedure crearDll
*-----------------------------------------------------
=DLLUnreg(dllnom)
Build Mtdll (DLLnom) From (proyecto) recomp
*---------------------------------------
FUNCTION DLLUNREG( dllnom as String ) as Boolean
*---------------------------------------
If File(DLLnom)
Declare Integer DllUnregisterServer In (DLLnom)
DllUnregisterServer()
Clear Dlls
Endif
*-----------------------------------------------------
Procedure BorrarComApp
*-----------------------------------------------------
oComAdmin = Createobject('ComAdmin.ComAdminCatalog')
oAplicaciones = oComAdmin.GetCollection('Applications')
oAplicaciones.Populate
oComAdmin = .Null.
NumApps = oAplicaciones.Count-1
zIndex = 0
For EACH oAplicacion IN oAplicaciones
If oAplicacion.Name == NombreAplicacionCom
oAplicaciones.Remove(zIndex)
zIndex = zIndex-1
ENDIF
zIndex = zIndex+1
Endfor
oAplicaciones.SaveChanges
oAplicaciones = .null.
*--------------------------------------------------------------
Procedure CrearComApp
*-------------------------------------------------------------
oComAdmin = Createobject('ComAdmin.ComAdminCatalog')
oAplicaciones = oComAdmin.GetCollection('Applications')
oIridioAplicacion = oAplicaciones.Add
With oIridioAplicacion
.Value('Name') = NombreAplicacionCom
.Value('Description') = 'Servidor Com'
Endwith
oAplicaciones.SaveChanges
guid = oIridioAplicacion.Value('ID')
oComAdmin.InstallComponent(guid,Fullpath(DLLnom),'','')
oRoles = oAplicaciones.GetCollection('Roles',oIridioAplicacion.key)
oNuevoRol = oRoles.Add
oNuevoRol.Value('Name')='Usuario de Aplicacion Com'
oRoles.SaveChanges
oUsuariosDelRol = oRoles.getCollection('UsersInRole',oNuevoRol.key)
oNuevoUsuarioDelRol = oUsuariosDelRol.Add
oNuevoUsuarioDelRol.value('User') = 'Pc01\Marco'
oUsuariosDelRol.SaveChanges
*------------------------------------------
procedure exportarApp
*------------------------------------------
ERASE (CURDIR()+'MSI\'+NombreAplicacionCom+'.msi')
oComAdmin.ExportApplication(NombreAplicacionCom,CURDIR()+'MSI
\'+NombreAplicacionCom,2)
*------------------------------------------------------
PROCEDURE listarUsuarios
*------------------------------------------------------
oComAdmin = Createobject('ComAdmin.ComAdminCatalog')
oAplicaciones = oComAdmin.GetCollection('Applications')
oAplicaciones.Populate
NumApps = oAplicaciones.Count-1
For EACH oAplicacion IN oAplicaciones
If oAplicacion.Name == NombreAplicacionCom
oRoles = oAplicaciones.GetCollection('Roles',oAplicacion.Key)
oRoles.populate
FOR EACH rol IN oRoles
? 'Rol:',
rol.name
oUsuariosdelRol = oRoles.GetCollection('UsersInRole',rol.key)
oUsuariosdelRol.populate
FOR EACH usuario IN oUsuariosdelRol
? 'Usuario.:' ,
usuario.name
ENDFOR
ENDFOR
ENDIF
Endfor
oAplicaciones = .null.