PDA

Ver la Versión Completa : Actualizar mi programa


Minio
17-12-2007, 11:36:21
Saludos!!

Quisiera que me ayudéis, por que quiero ver la forma de actualizar mis programas cuando hago algún cambio, para hacer el archivo de instalación he utilizado InstallShield, ahora quisiera realizar un ejecutable que me actualice la instalación anterior pero no se como, he leído otros hilos pero no lo veo claro. Además no se como crear el desinstalador al instalar mi programa.

Gracias....

lgarcia
17-12-2007, 13:30:28
Hola:

Con relacion a la actualizacion de un programa lo que hago es un pequeno ejecutable que realiza la comparacion de la fecha de modificacion tanto del programa que esta en la maquina de los usuarios con la del servidor o PC donde esta la ultima version y si es mas nueva la remplazo, eso si el usuario tiene que tener privilegios para poder sobrescribir porque si el programa esta en Archivos de programa y es un usuario limitado no podra hacerlo.
y ese ejecutable al final llama al verdadero programa.

aqui te envio un codigo que puede te sirva:


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
fecha1, fecha2: Double;
function GetFileDate(TheFileName: string): Double;
var
FHandle: integer;
begin
FHandle := FileOpen(TheFileName, 0);
try
Result := Int(FileDateToDateTime(FileGetDate(FHandle)));
finally
FileClose(FHandle);
end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
ShortDateFormat:= 'MM/dd/yyyy';
fecha1:= GetFileDate('C:\Archivos de programa\Programa\pepe.exe');
WinExec(PChar('net use G: \\Servidor (file://\\Servidor) password/user:administrador'),SW_HIDE);
fecha2:= GetFileDate('G:\\sadvalcajero.exe');
if fecha2 > fecha1 then
CopyFile(Pchar('\\192.168.10.16\temp\pepe.exe'), Pchar('C:\Archivos de programa\Programa\pepe.exe'), False);
WinExec(PChar('net use G: /delete'),SW_HIDE);
Close;
//
WinExec(PChar('C:\Archivos de programa\Programa\pepe.exe'),SW_SHOWNORMAL);
end;
end.


Saludos

Luis Garcia

fide
17-12-2007, 14:28:47
Hola. Tambien seria razonable hacerlo via web. Si tienes esta posivilidad, solo necesitas un programa para descargar el exe que tienes en la www y reemplazarlo. Si necesitas ayuda con esto, me dices para ayudarte un poco...

ixMike
17-12-2007, 15:31:57
Nunca lo he usado, pero, ¿InstallShield no reemplazaría los archivos antiguos por los nuevos (y los demás los dejaría tal cual)?

En todo caso, si usas bases de datos y en la actualización cambias de tipo de base de datos (por ejemplo, de paradox a interbase [es un ejemplo, no me juzgueis :o]), pues ahí tendrías que hacer un programita que te pasara los datos antiguos a la nueva base de datos. Y lo mismo con todos los archivos en que guardes datos y les hallas cambiado la estructura.


Saludos.

Minio
17-12-2007, 17:56:41
InstalShield me detecta la instalación anterior y me dice que antes de nada desinstale la aplicación y empiece de nuevo y lo que quisiera es que me diera la oportunidad de reparar, modificar o eliminar.

Como me decís, con el tema de la base de datos llevare cuidado por que no quiero chafarla, me gustaria que si hago algún cambio en cualquier tabla me respete su contenido sin machacarlo.

Pero sobre todo lo que principalmente me interesa es hacer un ejecutable que automáticamente sustituya el .exe para actualizar la aplicación

bueno sigo con ello... gracias a todos me estáis despejando mucho el camino