Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Ayuda con InstallShield URGENTE

Buenas a tod@s los forer@s.

Antes de nada decir que he buscado en todos los hilos y no he encontrado lo que necesito y no tengo ni idea de como hacer....

A ver, tengo una aplicación hecha con Delphi y quiero utilizar InstallShield 12 para hacer un autoinstalable. El problema es que quiero que en este autoinstalable, además de copiar los ficheros ejecute alguno de ellos al terminar esa instalación.

Intentaré explicarme mejor que estoy algo espesito:

Además de mi .exe compilado con Delphi quiero distribuir con mi aplicación mySql (setup.exe), el driver ODBC de mySql (setup) de forma que el mismo instalador lance el instalador de esas dos aplicaciones y posteriormente ejecute unos scripts que tengo creados para crear la base de datos (MySql) y el odbc necesario (por linea de comandos) para que la aplicación corra. (si alguien necesita alguno de esos scripts solo tiene que pedirlos)

NO TENGO NI IDEA de como hacer esto, es decir, que al terminar la instalación creada con el InstallShield que pone los autoinstalables de esas dos aplicaciones los ejecute (por resumir)

Se admite cualquier idea !!!!

Pd.- Se me había ocurrido algo tan simple como hacer una aplicación con delphi que ejecutara esos programas pero si en un botón pongo varios winExec se me ejecutan al mismo tiempo, no de forma secuencial como yo quiero....

Vamos, lo dicho, que cualquier idea será bienvenida. Sobra decir que estoy totalmente bloqueado ahora mismo ;P

Saludos
Responder Con Cita
  #2  
Antiguo 28-08-2007
krlosrp krlosrp is offline
Miembro
 
Registrado: ago 2007
Posts: 18
Poder: 0
krlosrp Va por buen camino
Quizas te resulte mas facil con inno setup + istool (es gratis), yo hago mis instaladores con esta herramienta y hace todo eso que quieres hacer, el installshied tambien pero ya no recuerdo como se hace. Espero te sirva de algo.
Responder Con Cita
  #3  
Antiguo 28-08-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Lo primero.... Gracias, ya es un paso, jejejeje

Ya tengo el inno setup.Me falta hacerme con el istool pero vamos, mañana a primera hora. Me puedes contar como hacerlo, si no me manejo con el InstallShield y lo he usado en modo básico, imagina el inno setup + istool que ni tan siquiera lo he visto nunca.

Gracias. Sigo avanzando.

Pd.- Hay forma en Delphi de programar winExecs secuenciales de forma que se vayan ejecutando paso a pasa, cuando termine el primero... se ejecuta el segundo y así sucesivamente?
Responder Con Cita
  #4  
Antiguo 29-08-2007
Fumaxclamp Fumaxclamp is offline
Miembro
 
Registrado: may 2006
Posts: 14
Poder: 0
Fumaxclamp Va por buen camino
Hola jymy788 yo tambien tengo el mismo problema que tu, de momento para resolverlo hice otra aplicacion en delphi tipo el instalador de delphi en el que el usuario escoje lo que requiere instalar ya que no en todas las maquinas se van a intalar la base de datos, al menos esta solucion me resolvio el problema aunque si encuentras una como la que pides posteala por favor para saber.

por cierto podrias poner tu scripts para crear la base de datos (MySql) y el odbc necesario (por linea de comandos) para que la aplicación corra.

seria de gran ayuda.

gracias.
Responder Con Cita
  #5  
Antiguo 29-08-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Poder: 17
paldave Va por buen camino
Thumbs up

Hola.
Puedes ejecutar programas secuencialmente, lo único que tienes que hacer es indicarle que espere hasta que el proceso termine antes de llamar al siguiente. Hablando más claramente (en código) sería:
Código Delphi [-]
type
  TLaunchMode = (lmNormal, lmMaximized, lmMinimizedActive, lmMinimizedInactive, lmHide);
  TPriority =(pIdle, pNormal, pHigh,pRealTime);

function LaunchExtended(Filename:String; WaitForEnd: Boolean; TimeForWait:Cardinal=0; Parameters, StartFolder:String; LaunchMode:TLaunchMode; Priority:TPriority):Integer;
var
  Directorio, ArchivoyParametros: PChar;
  ModoMostrar, Prior: Integer;
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
  Cancel:Boolean;
begin
  
if TimeForWait=0 then TimeForWait:=INFINITE;

  if Parameters='' then
      ArchivoyParametros:=PChar(FileName)
  else
      ArchivoyParametros:=PChar(FileName+' '+Parameters);

  if StartFolder='' then
    Directorio:=nil
  else
    Directorio := PChar(StartFolder);

  case LaunchMode of
    lmNormal: ModoMostrar := SW_SHOWNORMAL;
    lmMaximized: ModoMostrar := SW_SHOWMAXIMIZED;
    lmMinimizedActive: ModoMostrar := SW_SHOWMINIMIZED;
    lmMinimizedInactive: ModoMostrar := SW_SHOWMINNOACTIVE;
    lmHide: ModoMostrar := SW_HIDE;
  end;

  case Priority of
    pIdle: Prior:=IDLE_PRIORITY_CLASS;
    pNormal: Prior:= NORMAL_PRIORITY_CLASS;
    pHigh: Prior:= HIGH_PRIORITY_CLASS;
    pRealTime: Prior:=REALTIME_PRIORITY_CLASS;
  end;

 //Ejecuta el archivo
   FillChar(StartupInfo, Sizeof(StartupInfo), #0);
   StartupInfo.cb := Sizeof(StartupInfo);
   StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow := ModoMostrar;
     if (CreateProcess(nil, ArchivoyParametros, nil, nil, False, CREATE_NEW_CONSOLE or Prior, nil, Directorio, StartupInfo, ProcessInfo)) then
    begin
        result:=0;
        if WaitForEnd then   Result:=WaitforSingleObject(ProcessInfo.hProcess, TimeForWait);
     end
     else
         result:=-1;
end;
Debes llamar el procedimiento por ejemplo de la siguiente forma:
Código Delphi [-]
LaunchExtended(FileName, WaitForEnd, TimeForWait, Parameters, StartFolder, LaunchMode, Priority:TPriority)
por ejemplo
Código Delphi [-]
LaunchExtended('C:\Windows\System32\Calc.exe', True, 0,'', 'C:\Windows\System32', lmNormal, pNormal)
donde Filename es el nombre del archivo ejecutable que deseas correr; WaitForEnd es un booleano que indica si quieres que la rutina espere a que el ejecutable se cierre para retornar; TimeForWait es la cantidad de milisegundos que la rutina debe esperar por que el ejecutable se cierre antes de retornar, si no se ha cerrado en ese tiempo retorna igual, si quieres que espere indefinidamente hasta que se cierre debes especificar 0 en este parámetro; Parameters son los parámetros que quieres pasarle al ejecutable; StartFolder es la carpeta de inicio para ese ejecutable (normalmente la misma en que se encuentra); LaunchMode es el modo en que quieres que la ventana se ejecute (normal, minimizada, maximizada, etc); y Priority es la prioridad con que quieres que se ejecute el archivo (baja, normal, alta, etc). La rutina devuelve 0 si el archivo se pudo ejecutar o -1 si no se pudo ejecutar.

Última edición por paldave fecha: 29-08-2007 a las 03:13:11. Razón: Pequeño error en el código
Responder Con Cita
  #6  
Antiguo 29-08-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Buenas paldave.

Gracias por tu aportación.

Tengo un problema con el código que pusiste de la función. Al compilarlo:

Código:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TLaunchMode = (lmNormal, lmMaximized, lmMinimizedActive, lmMinimizedInactive, lmHide);
  TPriority =(pIdle, pNormal, pHigh,pRealTime);
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    function LaunchExtended(Filename:String; WaitForEnd: Boolean; TimeForWait:Cardinal=0; Parameters, StartFolder:String; LaunchMode:TLaunchMode; Priority:TPriority):Integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}
 
...
Tendría un botón que llamaría a ese función como pones pero como decía, en la compilación da el siguiente error:

[Error] Unit1.pas(16): Default value required for 'StartFolder'
...

Por qué puede ser?

perdona mi ignorancia
Responder Con Cita
  #7  
Antiguo 29-08-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
me respondo a mi mismo.... Si definimos la función de la siguiente forma compila sin problemas.

Código:
function LaunchExtended(Filename:String; WaitForEnd: Boolean; TimeForWait:Cardinal=0; Parameters:string=''; StartFolder:String='c:\'; LaunchMode:TLaunchMode=lmNormal; Priority:TPriority= pNormal):Integer;
Pero ahora tengo un problema porque en un botón hago lo siguiente:

Código:
LaunchExtended(mysql_odbd_3.52.exe', True, 0, '', 'C:\Windows\System32', lmNormal, pNormal);
  LaunchExtended(Setup.exe', True, 0, '', 'C:\Windows\System32', lmNormal, pNormal);
y me sigue ejecutando los dos de golpe sin esperar el segundo a que termine el primero...

Por qué puede ser? Cómo solucionarlo?

Gracias de nuevo
Responder Con Cita
  #8  
Antiguo 29-08-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Help !!!

Al parecer el problema radica en que, por ejemplo, el ejecutar mysql_odbd_3.52.exe para esa función y ShellExecuteEx (que es similar) el control lo devuelve en cuanto abre el instalador y éste, en si, es otra aplicación distinta.

Vamos, que sigo estando como al principio !!!!

Necesito Ayuda !!!

Gracias
Responder Con Cita
  #9  
Antiguo 29-08-2007
Avatar de paldave
paldave paldave is offline
Miembro
 
Registrado: ago 2007
Ubicación: Uruguay
Posts: 148
Poder: 17
paldave Va por buen camino
¿Te has fijado si el ejecutable mysql_odbd_3.52.exe no es un archivo zip o rar autoextraible? Ahí podría estar el problema, ya que lo que necesitas es llamar directamente al ejecutable del instalador.
Responder Con Cita
  #10  
Antiguo 30-08-2007
jymy788 jymy788 is offline
Miembro
 
Registrado: jun 2004
Posts: 120
Poder: 20
jymy788 Va por buen camino
Si, me he fijado. Realmente mysql_odbd_3.52.exe abre un "Windows instaler" automáticamente pero no encuentro la forma de invocarlo directamente.

Se admite cualquier idea más, jejejeje.

Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda Urgente!!!! abogado C++ Builder 2 08-12-2005 20:12:12
Ayuda URGENTE Iskariote Varios 4 13-07-2005 00:15:59
Ayuda con InstallShield juanchi Varios 2 19-10-2004 19:01:42
Ayuda Para Installshield O Algo Parecido cmena Varios 2 29-08-2004 22:29:28
Creación de .cab con installshield ¡Ayuda!. voci Varios 0 25-02-2004 22:08:29


La franja horaria es GMT +2. Ahora son las 00:14:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi