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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.