konuka yazdı:ben aşağıdaki kodla yazılmış bir başlatma programı ile çalıştırıyorum.
Mantığı şöyle: sunucudaki esasprogram.exe ile clienttaki esasprogram.exe yi tarih açısından karşılaştırıyor - yenisi var ise clienta kopyalıyor - clienttan programı çalıştırıyor - ilk defa kullanan clientta gerekli dosyaları da kopyalıyor...
Visual Fox Pro
* PROGRAM BAŞLATICI - HER KULLANICI PROGRAMI SUNUCUDAN KOPYALAYIP KULLANIYOR
#DEFINE AYNI_ANDA "AYNI ANDA İKİ AYNI UYGULAMA ÇALIŞMAMALI"
#DEFINE UYGULAMA_ACIK "UYGULAMA AÇIK"
#DEFINE KAYNAK_YOK "kaynak dosya yok"
#DEFINE MUHTEMELEN "muhtemelen sunucuya bağlanmadınız"
#DEFINE SORUNU_COZEMEZSENIZ "SORUNU ÇÖZEMEZSENİZ SİSTEM SORUMLUSUNA DANIŞIN"
#DEFINE LUTFEN_BEKLEYIN "lütfen bekleyin"
#DEFINE YENI_SURUM "programın yeni sürümü kopyalanıyor"
#DEFINE CRT CHR(13)
LOCAL lokaldizin, kaynakdizin, lokaldosya, kaynakdosya, uygulama
ON ERROR RETURN
uygulama="exeirs9.exe"
lokaldizin="C:\atenuygulamalar"
dlldizin="\\tlsanasunucu\fox\vf9rf"
kaynakdizin="\\tlsanasunucu\fox\prgexe"
* önce lokal bilgisayarda dizin oluştur ve vfp dll dosyaları kopyala...
SET PATH TO
IF ! DIRECTORY(lokaldizin)
MD(lokaldizin)
ENDIF
*vfp9r.dll
*vfp9t.dll
*vfp9renu.dll
*msvcr71.dll
*gdiplus.dll
*msvcr70.dll
IF !FILE(lokaldizin+"\vfp9r.dll")
kaynakdosya=dlldizin+"\*.dll"
lokaldosya=lokaldizin+"\*.dll"
COPY FILE &kaynakdosya TO &lokaldosya
ENDI
SET DEFA TO &lokaldizin
** PROGRAMIN ÇALIŞIP ÇALIŞMADIĞINI KONTROL ET
IF uygulamaçik(JUSTFNAME(ADDBS(lokaldizin)+uygulama))
=MESSAGEBOX(AYNI_ANDA,16,UYGULAMA_ACIK)
RETU
ENDI
lokaldosya=ADIR(dosyabilgilerilokal,uygulama) && lokal dizin: default
kaynakdosya=ADIR(dosyabilgilerikaynak,ADDBS(kaynakdizin)+uygulama) && kaynak dizin
IF kaynakdosya= 0 && kaynak yoksa çık
=MESSAGEBOX( KAYNAK_YOK+CRT+MUHTEMELEN,16,SORUNU_COZEMEZSENIZ)
RETU && QUIT
ENDI
IF lokaldosya=0 OR ; && ilk defa
! dosyabilgilerilokal[1,3]=dosyabilgilerikaynak[1,3] OR ;
! dosyabilgilerilokal[1,4]=dosyabilgilerikaynak[1,4]
WAIT WINDOW LUTFEN_BEKLEYIN+CRT+YENI_SURUM NOWAIT NOCLEAR
SET SAFE OFF && KULLANICIYA İNSİYATİF İÇİN KALDIRILABİLİNİR
kaynakdosya=ADDBS(kaynakdizin)+uygulama
lokaldosya=ADDBS(lokaldizin)+uygulama
COPY FILE &kaynakdosya TO &lokaldosya
SET SAFE ON
WAIT CLEAR
ENDIF
** uygulamayı başlat
lnWindowState = 9 && SW_SHOWNORMAL
lnhWnd = 0
lcop = 'open'
lcparms = ""
*lcfilename = " " ->lokaldosya=lokaldizin+uygulama
*lcpath = JUSTPATH(lcFilename) ->lokaldizin
lokaldosya=ADDBS(lokaldizin)+uygulama
DECLARE INTEGER ShellExecute IN Shell32;
INTEGER hWnd, STRING @lpOperation,;
STRING @lpFile, STRING @lpParameters,;
STRING @lpDirectory, INTEGER nShowCmd
lnresult = ShellExecute(0, @lcop, @lokaldosya,;
@lcparms, @lokaldizin, lnWindowState)
IF lnresult < 33 && Error occurred
IF lnresult = 31 && No file associated
DECLARE INTEGER GetSystemDirectory IN Win32API STRING @lpBuffer, INTEGER nSize
lnsize = 260
lcbuffer = SPACE(lnsize)
lnsize = GetSystemDirectory(@lcbuffer, lnsize)
IF lnsize > 0
lcbuffer = LEFT(lcbuffer, lnsize)
lcrundll = "RUNDLL32.EXE"
lcparms = "shell32.dll,OpenAs_RunDLL "
lnresult = ShellExecute(lnhWnd, @lcop, lcrundll,;
lcparms + lokaldosya, lcbuffer, lnWindowState)
ENDI
ENDI
ENDI
RETURN lnresult
***********************************************************
** UYGULAMA TEK ÇALIŞMALI
PROCEDURE uygulamaçik
** uygulamaçik("uygulama.exe")
PARAMETERS myApp
=ddesetoption("SAFETY",.F.)
ichannel = DDEINITIATE(myapp,"ZOOM")
IF ichannel =>0
=DDETERMINATE(ichannel)
RETU .t.&& QUIT
ENDI
=DDESETSERVICE(myapp,"define")
=DDESETSERVICE(myapp,"execute")
=DDESETTOPIC(myapp,"","ddezoom")
RETURN .f.
************
Konuka ' nın çözümüne alternatif bir çözüm benim kullandığım;
* UT 'den Nick Neklioudov ve George Tasker in ürettiği bir çözüm bu
server da app nin calistigi dizine http://www.fox4um.com/downloads/launcher.zip launcher.exe ve launcher.ini kopyalanacak ve asagidaki islemler yapilacak
1- Server a NetWorkMap (ağ sürücüsü ile bağlanilacak ve bir surucu yaratilacak)
Örn: H:\
H:\My_app dizininde olması gerekenler && server
2- launcher.exe
launcher.ini
myapp.exe && uygulama exe niz
launcher.ini de
guncellenmesi gereken dosya adları yazılacak
myapp.exe
data\dd.dbf gibi
&& bu sekilde terminalde guncellenmesi gereke ne varsa launcher.ini bunlari server dan cekecek
3- C:\my_app &&client pc de olacak
Client desktop shortcut parametreleri && uygulamaanin kisayolu
Target: (hedef)
H:\my_app\launcher.exe c:\my_app
Start in: (başlangıç yeri)
c:\my_app
bu kısayol uzerinden uygulamanizi calistirdiginizda once serverdaki launcheri calistiracak gerekli guncelleme kontrolunu yapacak .ini dosyadaki belirtilenlere göre eğer güncelleme gerekiyorsa bu dosyalari client a kopyalayacak ve ardindan clieanttan uygulama exe nizi calistiracak.
bu sayede clientlar icin guncelleme ile ilgili takibi unutacaksiniz
muse_star ben almanca biliyorum gerekirse sorununu almanca yada ingilizce olarak programciniza iletebilirim ama aldigin hatalari net olarak buraya aktarabilmen gerek...