Utilizo algo parecido a estos, con archivos bat en windows 7 y 8., esto permite abrir la ventana para dar permiso de instalacion y el usuario no tiene que ejecutar como administrador.
*!* Primero crear un comando bat para registrar clases
*!* lo llamamos regserver.bat y tendra la siguiente instruccion
regsvr32.exe %1
*!* esto es ejecutar el registro de la ocx, dll. que le pasaremos como parametro
*!* en caso de querer eliminar un activex del registro creamos el fichero unregserver.bat
regsvr32.exe -u %1
*!* Estos dos ficheros los creamos en el directorio del ejecutable de nuestra aplicación
*!* Luego creamos nuestro prg (o clase, procedure..etc)
*!* en nuestro caso registrarocx.prg
PROCEDURE registrarocx
PARAMETERS lcocxname, lcocxrefname
&& lcocxname Nombre del activex con su extension
&& lcocxrefname Nombre Interno Activex
DECLARE INTEGER ShellExecute ;
IN SHELL32.DLL ;
INTEGER nWinHandle,;
STRING cOperation,;
STRING cFileName,;
STRING cParameters,;
STRING cDirectory,;
INTEGER nShowWindow
DECLARE INTEGER RegOpenKey IN Win32API INTEGER nHKey, STRING @cSubKey, INTEGER @nResult
DECLARE INTEGER RegCloseKey IN Win32API INTEGER nHKey
*!* Para saber si una clase esta registrada y si no lo esta, registrarla
*!* =OcxRegistrado(lcocxrefname) && Atencion: Aqui va la referencia o nombre interno del ActiveX:
&& Los archivos OCX tienen una referencia o nombre interno,
&& para averiguar cual es agregamos este a un formulario de VFP,
&& lo seleccionamos y revisamos la propiedad OleClass y ese será el nombre que utilizaremos.
&& --Jesus Caro V en Como saber si un Ac ya fue registrado 19/12/2007 Comunidad Vfp Español--
&& Ej. para ms chart seria "=OcxRegistrado("mschart20lib.mschart.2")"
FUNCTION OcxRegistrado(cClase)
LOCAL npos, lEsta, lcdirocx
nPos = 0
IF lEsta=.T.
Wait windows "Esta registrada"
RegCloseKey(nPos)
ELSE
wait windows "Pulse SI y ACEPTAR en las siguientes ventanas para actualizar su programa"
lcdirocx = FULLPATH("lcocxname")
=SHELLExecute(0, "RunAs","regserver.bat", lcdirocx,"", 1)
&& Para desregistrar seria lo anterior pero con unregserver.bat
ENDIF
ENDFUNC
ENDPROC