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);
} 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