Ver Mensaje Individual
  #2  
Antiguo 08-08-2012
gersojn gersojn is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 85
Reputación: 15
gersojn Va por buen camino
Quiza esto te sirva

Cita:
Empezado por jonydread Ver Mensaje
amigos !!
me hechan una manito lo que pasa es que quiero editar,modificar y si no existe crear un archivo con extension .cmd que instala un programa
estube viendo este hilo pero no se me ocurre la forma de hacerlo
el archivo debe ser de este formato y al agregar un programa se edite y agrege las lineas antes de exit, alguna idea porfavor...
Código:
CLS
@echo off
 Echo........................................
 Echo..........Install  program
 start /wait %AppsRoot%\Install\program.exe -install
 Echo..................Installed.............
exit
saludos!!
Pues lo que te recomiendo, es que siempre que crees un archivo consultes si este esta.

Código Delphi [-]
if FileExists( 'C:\Bla\bla\bla\Archivo.cmd' ) then
Begin
//Si existe sobre escribo, leo, modifico o elimino, dependiendo de la accion que quieras efectuar con el
Else
// Creo mi archivo
End;
Con esto puedes verificar cuando no exista el archivo o cuando si esta, para que puedas efectuar las acciones que desees., pasando como parametro el
Directorio(en caso de que el archivo no este en la misma ubicacion de tu aplicacion) y el nombre del archivo a la funcion FileExists() .

Para crear un archivo, la forma mas sutil y menos complicada que te recomiendo es utilizar un componente TMemo. Podes crear tu
archivo con el contenido del TMemo de la siguiente forma, asumiento que el componente TMemo incluido en la aplicacion le coloques de nombre Memo1.

Código Delphi [-]
Memo1.Lines.Add('Aca puedes escribir lineas, si lo que quieres es automatizar algo, por ejemplo cargar comandos de un archivo, etc etc');
// O bien escribir las intrucciones desde la aplicacion como un procesador de texto, como ejemplo claro.
//Para salvar tu archivo o guardarlo|Crearlo haces lo siguiente
Memo1.lines.SaveToFile('NombreArchivo.cmd');
Ahora bien con lo de al agregar un programa se edite y agrege las lineas antes de exit, no entiendo muy claramente, pero pienso que la
solucion que te dare aplique correctamente a lo que necesites.
Vamos por partes, necesitas detectar cuando es que se agrega un programa, asumo que en el sistema operativo donde correra la aplicacion,
como tambien puede ser un directorio apclock o un recurso compartido, bla-bla-bla, bueno lo importante es saber cuando es que ocurre ese cambio,
entonces lo ideal es que con tu aplicacion coloque un timer, el cual se encarge de monitorear el directorio de instalacion de las aplicaciones y tener
una imagen o estructura de los directorios o aplicaciones instalas (En caso de instalaciones en sl S.O. OJO que no todas de aparecen los programas
instalados ya que algunos solo crean directorio e inician como servicio, cabe como ejemplo) esta estructura o imagen de aplicaciones o directorios la
guardas en X lugar o directorio y cada cierto tiempo comparas la estructura guardada, con la estructura actual y si hay cambio, verificar
cual es directorio nuevo o aplicacion nueva y capturarla. Pero bueno todo eso como que suena a marciano, y bueno como jodidos hago eso???

Puedes hacerlo con 3 Tmemos un timer y algunas funciones.
Timer = Timer1
Tmemo= Memo1,Memo2,Memo3;

Código Delphi [-]
//Esta funcion te permite buscar por directorios de instalacion, ahora bien si lo que necesitas es buscar por aplicacion, puedes usar la funcion
//FileExists() pasando como parametro directorio y archivo 
function RastreaDir( Dir: string ):TStringList;
   var
      FileSearch:  TSearchRec;
   begin
     Screen.Cursor := crHourGlass;
     Result := TStringList.Create;
     Result.Clear;
     ChDir ( Dir );
     if FindFirst ( '*.*', faDirectory, FileSearch )=0 then
     repeat
     if ( (FileSearch.Attr and fadirectory) = fadirectory) then
       begin
         if  (FileSearch.Name <> '.')and (FileSearch.Name <> '..') then
           RastreaDir( Dir + '\' + FileSearch.Name );
       end
     else
       begin
         //Aca cargamos el directorio actual
         Form1.Memo1.Lines.Add( FileSearch.Name );
        //Aprovechamos y cargamos la imagen de estructura guarda con la cual compararemos cambios, recuerdas!!, claro, lo condicionas, 
      if FileExists( 'C:\Bla\bla\bla\ArchivoImagenDirectoriooaplicaciones.txt' ) then
      Begin
      //Si existe lo cargo al Memo2
      Else
      // Creo mi archivo
     Form1.Memo2.Lines.Add( Memo1.text );//Lo creo con la imagen de directorio.
End; 
      end;
     until FindNext( FileSearch ) <> 0;
     FindClose( FileSearch );
     Screen.Cursor := crDefault;
  end;

//Bueno ahora solo toca que comparar, esto lo puedes hacer con un Boton, en el cual incluyes un ciclo
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to memo2.Lines.Count-1 do
begin
      
   if memo1.Lines[i] <> memo2.Lines[i] then
    memo3.lines.add(memo1.lines[i]);//Esto asumiendo que se hayan instalado 1 o mas programas se listan en memo3
end;
end;

//Bueno por ultimo, si ha sucedido un cambio o en tu caso una instalacion nueva, agregarla al archivo de log o bueno donde listas las
 //instalaciones antes del exit.

//Con lo anterior tenemos un Memo3 que tiene ya un listado de 0 a N programas instalados, si tenemos un 0 programas instalados, no hay 
//problema, no se hace ningun cambio. Si Memo3 registra una nueva instalacion, haces lo siguiente.
//Cargas el archivo donde registras las instalaciones en un Memo.
Memo1.lines.LoadFromFile('Direcotio\Archivo');
//Una vez cargado el archivo, puedes leer el archivo linea por linea, esto con un ciclo

for i:=0 to memo1.Lines.Count-1 do
begin
      
   if memo1.Lines[i].String = 'exit' then
    X:= i; //en X capturas en que Linea es exit, luego vuelves a efecutar el ciclo
end;

for a:=0 to memo1.Lines.Count-1 do
begin
   if a = (X-1) then //Buscamos la linea anterior a exit, al encontrarla
   Memo1.Lines.Add(Memo3.Text);    //Agregamos las lineas que tenemos en el Memo3 donde tenemos los cambios
   
end;
Memo1.Lines.SavetoFile('Directorio\Archivo');//Guardas el Archivo con el mismo nombre en el mismo Directorio y Listo..

Bueno mi amigo, espero esto de pueda ser util y sacar de un apuro, algo que si te digo, es que de todo lo que aporte algo no es optimo, y es
lo ultimo de leer el Memo1 para detectar donde esta el exit y luego lanzar otro ciclo para agregar las instalaciones, pero funciona, igual alguien
del foro ayuda en ello, ya que ahora mismo no recuerdo otro algoritmo que efectue esa rutina de mejor forma.
Cualquier duda comentas.
Saludos..

Última edición por Casimiro Noteví fecha: 08-08-2012 a las 11:15:41. Razón: Agregar sintaxis, pasada por alto.
Responder Con Cita