ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

un simple loader   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
16/20
3 votes


Contributions > 21 - Outils

un simple loader
# 0000000384
ajouté le 02/01/2007 13:21:31 et modifié le 02/01/2007
consulté 9221 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0
VFP 3.0

Description

Ce n'est pas facile quand on doit faire une maj et l'exe se trouve sur un serveur

Comment faire ?

  • creer un projet - Loader
    • mettre le code ci-dessous comme main
    • faire un build, ansi on obtient loader.exe
  • Mise en place
    • supposons
      • exe se trouve a l'endroit: F:\Adam\Adam.exe
    • Au lieu de faire un exe, faire une .App, eg Adam.app
    • copier Loader.exe >> F:\Adam\Adam.exe (une seule fois)
    • deposer Adam.app dans F:\Adam
    • ce qui fait que F:\Adam contient
      • Adam.exe: le loader d'environs 9 ou 10 kb
      • Adam.app
    • Sur chaque pc
      • creer un repertoire, eg C:\Adam
      • creer un raccourci
        • demarrer dans : C:\Adam
        • cible: F:\Adam\Adam.exe
  • Comment cela fonctionne ?
    • Lors du demarrage le 'F:\Adam\Adam.app' sera copie dans C:\Adam si
      • C:\adam\Adam.app (local) n'existe pas, ou
      • F:\Adam\adam.app est plus recent
  • Les maj ?
    • Simple
      • deposer un nouvel adam.app sur le serveur (ici F:\Adam\adam.app)
      • tout utilisateur qui demarrera l'appli apres aura le 'adam.app' le plus recent

 

Code source :
** Loader
#define  TRUE  .T.
#define  FALSE  .F.

procedure Loader()
  lparameters  _p01,_p02,_p03,_p04,_p05,_p06,_p07,_p08,_p09,_p10,_p11,_p12,_p13, ;
        _p14,_p15,_p16,_p17,_p18,_p19,_p20,_p21,_p22,_p23,_p24,_p25,_p26,_p27

  declare Integer GetFileAttributes in win32api string @
  declare Integer DeleteFile in win32api string @
  declare Integer CopyFile in win32api string @, string @, Integer

  acti screen
  _screen.Fontname = 'Courier New'
  _screen.Fontsize = 10


  set FullPath On

  local StartupApp, LocalApp, cmd, i, n, MustCopy, fd
  n = pCount()


  StartupApp = addbs(justpath(StartUpExe()))+juststem(StartUpExe())+'.app'
  LocalApp = addbs(_vfp.DefaultFilePath)+juststem(StartUpExe())+'.app'

  cmd = 'do ("' + m.LocalApp + '")' + iif(m.n < 1, ''[ with "] + transf(m._p01) + ["])

  for i = 2 to n
    cmd = m.cmd + [,"] + transf(eval('m._p' + padl(m.i,2,'0'))) + ["]
  endfor
  for i = 1 to 27
    release  ('_p'+padl(m.i,2,'0'))
  endfor


  MustCopy = FALSE

  do case
  case ( m.StartupApp == m.LocalApp )
    && do nothing

  case !FileExists(m.StartupApp)

  case !FileExists(m.LocalApp)
    MustCopy = TRUE

  case fdate(m.StartupApp,1) <= fdate(m.LocalApp,1)

  otherwise
    fd = fopen(m.LocalApp)

    if( m.fd > 0 )
      =fclose(m.fd)
      MustCopy = !empty(DeleteFile(m.LocalApp))
    endif
  endcase

  do case
  case !m.MustCopy

  case empty(CopyFile(@m.StartupApp, @m.LocalApp, 1))

  endcase

  if( !FileExists(m.LocalApp) )
    =MessageBox('Cannot find ' + LocalApp, 0+16, JustStem(LocalApp))
    return
  endif

  release  StartupApp, LocalApp, i, n, MustCopy, fd
  &cmd

endproc
*----------------------------------------------------------------------------
function  StartUpExe()
  do case
  case ( ':' $ sys(16,0) )
    return  substr(sys(16,0), rat(':'sys(16,0))-1)
  otherwise
    return  substr(sys(16,0), rat('\\'sys(16,0)))
  endcase
endfunc
*----------------------------------------------------------------------------
Function  FileExists(FileName)
  return (GetFileAttributes(@m.FileName) <> -1)
endfunc
*--------------------------------------------------------------------------
Commentaires
Aucun commentaire enregistré ...

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3