Mise à jour de vos projets par une dll

Contenu du snippet

bonjour,

voici une dll qui permet de mettre à jour vos projets (l'executable, vos datas (textures, son,...), tout ce qui se rapporte a votre projet)

je vous poste le lien pour télécharger le tout. car il y a un exe de test inclu.

(je n'ai pas mis la source de la dll car elle peut etre mise à jour souvent, mais juste la source exemple pour savoir comment construire vos projets)

cette dll repose sur une gestion de fichier xml qui doit accompagner chaque fichier à mettre à jour

je posterai surement la source de la dll quand j'aurais une version qui ne nécessitera plus de mise à jour.
à part l'algo, la plupart du code se base sur les autres sources que j'ai posté sur cppfrance (CFilex, CDownload).
-la gestion xml est la librairie tinyxml
-la gestion pour dezipper est une source de Gilles Vollant légérement modifiée

voici un exemple

Source / Exemple :


include "stdafx.h"
#include <windows.h>
#include "darkupdate/darkupdate.h"

UpdateGlobalListFunc UpdateGlobalList=NULL;
TestFileFunc TestFile=NULL;
InitializeFunc Initialize=NULL;
DeleteGlobalListFunc DeleteGlobalList=NULL;
LaunchInstallFunc LaunchInstall=NULL;
UpdateDarkProjectFunc UpdateDarkProject=NULL;
CreateFileVersionFunc CreateFileVersion=NULL;
LaunchMeFromDosFunc LaunchMeFromDos=NULL;
//LaunchMeFromWin32Func LaunchMeFromWin32=NULL;
HINSTANCE Module=NULL;

DLL_API void EventMessage(char *message)
{
	printf("%s\n",message);
}

int main(int argc, char* argv[])
{
	
	char MYPATH[4096],DLLMYPATH[4096],EXENAME[4096],FULLPATH[4096];
	
	GetModuleFileName(GetModuleHandle(NULL), MYPATH, 4096);
	
	strcpy(FULLPATH,MYPATH);

	char *ft=strrchr(MYPATH,'\\');
	if (ft) {
		ft++;
		strcpy(EXENAME,ft);

  • ft = 0x00;
} else { strcpy(EXENAME,MYPATH); strcpy(MYPATH,".\\"); } while (1) { strcpy(DLLMYPATH,MYPATH); strcat(DLLMYPATH,"DarkUpdate.dll"); Module = LoadLibrary(DLLMYPATH); if (!Module) return NULL; UpdateGlobalList=(UpdateGlobalListFunc)GetProcAddress(Module, "UpdateGlobalList"); TestFile=(TestFileFunc)GetProcAddress(Module, "TestFile"); Initialize=(InitializeFunc)GetProcAddress(Module, "Initialize"); DeleteGlobalList=(DeleteGlobalListFunc)GetProcAddress(Module, "DeleteGlobalList"); LaunchInstall=(LaunchInstallFunc)GetProcAddress(Module, "LaunchInstall"); UpdateDarkProject=(UpdateDarkProjectFunc)GetProcAddress(Module, "UpdateDarkProject"); CreateFileVersion=(CreateFileVersionFunc)GetProcAddress(Module, "CreateFileVersion"); LaunchMeFromDos=(LaunchMeFromDosFunc)GetProcAddress(Module, "LaunchMeFromDos"); //LaunchMeFromWin32=(LaunchMeFromWin32Func)GetProcAddress(Module, "LaunchMeFromWin32"); Initialize(EventMessage); // pour afficher les messages if (LaunchMeFromDos(FULLPATH,argc,argv)) { FreeLibrary(Module); //si on rentre la, soit ya eu une erreur -1, soit on a executé le tmp return 0; } // si on arrive ici, on est dans le fichier temp if (UpdateDarkProject(DLLMYPATH) == 1) { // on met à jour la darkupdate.dll char NEWDLL[4096]; FreeLibrary(Module); strcpy(NEWDLL,MYPATH); strcat(NEWDLL,"DarkUpdate.xxx"); DeleteFile(DLLMYPATH); MoveFile(NEWDLL,DLLMYPATH); } else break; } CreateFileVersion("1.1",MYPATH,"demo"); // on creer le fichier xml char globallist[4096]; char xmlpath[4096]; UpdateGlobalList("http://dark.freezee.org/darkupdate/demolist.php",globallist,4096); // recuperation de la liste if (TestFile(FULLPATH,"demo",globallist,"demoversion",xmlpath,4096)) { //nouvelle version ? char *exe=strrchr(FULLPATH,'.'); // necessaire de transformer le .tmp en .exe sinon la mise a jour de l'exe ne passera pas if (exe) strcpy(exe,".exe"); //malgres cette petite contraite, cela permet de mettre a jour l'exe meme si on change le nom de celui-ci int r=LaunchInstall(FULLPATH,xmlpath); // mise à jour effectuée si r==1 } for (int j=0;j<argc;j++) printf("%s\n",argv[j]); /* la suite de votre programme ici exemple: if (TestFile("f:\\sound.wav","sound",globallist,"data",xmlpath,4096)) { int r=LaunchInstall("f:\\sound.wav",xmlpath); } playsound("f:\\sound.wav");
  • /
DeleteGlobalList(globallist); FreeLibrary(Module); return 0; }

Conclusion :


téléchargeable ici : http://dark.freezee.org/darkupdate/demo1.0.zip
consulter le fichier texte pour la documentation

A voir également