Cela pourrait ne pas être une réponse complète à la question, mais ils sont des choses que vous pourriez vouloir prendre en compte si vous êtes vous-même de mettre en œuvre:
Pour la partie « vérification de la mise à jour », sans le télécharger, vous pouvez télécharger un fichier texte à partir d'un emplacement en ligne, contenant la dernière version de la chaîne (par exemple 1.24). Cet extrait de code doit faire le travail pour la version Windows (bien que je ne l'ai pas testé):
#include <wininet.h>
_Bool CheckForUpdate() {
DWORD flags = 0; // Not really used. DWORD == unsigned long
if (!InternetGetConnectedState(&flags, 0)) {
// The user is not connected to the Internet. Finished?
}
// Open the connection (HINTERNET == void *):
HINTERNET connection = InternetOpen("User Agent", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (http == NULL) {
// Error.
...
}
HINTERNET updateFile = InternetOpenUrl(connection, "URL", NULL, FLAGS, 0);
if (updateFile == NULL) {
// Something went wrong.
...
InternetcloseHandle(connection); // Close the handle.
...
}
// Reached here, we have the connection up, reading the file:
char latestVersion[10] = {0};
DWORD bytesRead = 0;
if (InternetReadFile(updateFile, latestVersion, sizeof(latestVersion), &bytesRead) == FALSE) {
// Error.
...
InternetCloseHandle(updateFile);
InternetCloseHandle(connection);
...
}
// Internet stuff is finished, so the handles can be closed now:
InternetCloseHandle(updateFile);
InternetCloseHandle(connection);
// Check if there's a new version available:
if (strcmp(latestVersion, CURRENT_VERSION) > 0) {
// An update is available.
return 1;
} else {
// No new updates available.
return 0;
}
}
Il y a des liens vers la documentation sur les fonctions Wininet j'ai utilisé à la fin de la réponse, où vous pouvez voir quel est chaque paramètre pour.
Lorsque vous appelez InternetOpen()
, la chaîne de l'agent utilisateur peut être votre nom d'application par exemple. J'ai écrit INTERNET_OPEN_TYPE_DIRECT
car c'est l'installation la plus commune, aucune configuration de proxy n'est spécifiée.
Dans l'appel InternetOpenUrl()
, le deuxième paramètre doit être l'URL du fichier texte en tant que chaîne terminée NULL
. Pour le paramètre FLAGS
de cet appel, vérifiez les documents en ligne sur les différents que vous avez (consultez les liens en bas de la publication). Par exemple, une combinaison possible de drapeaux serait la suivante:
INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI
Le strcmp()
appel devrait bien fonctionner avec des lettres entre les versions aussi, donc en suivant l'exemple ci-dessus « 1.24c » devrait être une version plus récente que « 1.24 » ou "1.24a".
Si vous disposez de plusieurs chemins de version (comme les versions bêta par exemple), vous pouvez utiliser plusieurs champs du fichier texte ou plusieurs fichiers. Cela peut être utile si vous ne souhaitez pas envoyer les versions instables à tous les utilisateurs, mais uniquement à ceux qui souhaitent utiliser ces versions.
S'il n'y a pas d'erreur lors de la lecture du fichier, vous pouvez également ajouter une vérification pour voir si le code d'état HTTP était 200 (OK) en utilisant la fonction HttpQueryInfo()
avec l'indicateur HTTP_QUERY_STATUS_CODE
.
Quoi qu'il en soit, tout cela est seulement pour être reconnu des nouvelles versions, vous pouvez simplement en informer vos utilisateurs via un message ou utiliser un schéma similaire pour télécharger la nouvelle application d'installation. Pour la phase d'authentification, vous pouvez ajouter au fichier de version une somme de contrôle du fichier d'installation et la calculer une fois le fichier téléchargé.
Liens vers la documentation en ligne sur l'API Wininet:
espoir qui aide.
Je déteste l'approche de mise à jour de google. Il n'y a aucune raison pour que la vérification des mises à jour s'exécute plus souvent que j'utilise le programme, exécuter le programme de mise à jour sur un calendrier est tout simplement stupide. –
D'un coup d'œil, c'est trop compliqué pour ce dont j'ai besoin - a ajouté un PS à la question pour clarifier. – houbysoft