Question

Je souhaite enregistrer certaines préférences du programme XML comme une ressource dans une application Delphi. La ressource sera modifiée en fonction des changements de l'utilisateur. Je n'ai aucun problème créer le XML et le charger comme une ressource, et peut modifier le xmlDocument que je charge dans, mais je ne sais pas comment écrire le document en arrière. Est-ce seulement possible? Je préférerais ne pas se retrouver avec 2 fichiers à la fin (.exe et .xml).

Était-ce utile?

La solution

La réponse est à la fois oui et non.

Oui, il est possible de ressources de mise à jour dans un fichier binaire en utilisant des routines de l'API Windows. Ce lien vers BeginUpdateResource () devrait vous mettre sur la bonne voie sur ce point.

Cependant, vous remarquerez la condition suivante sur l'utilisation de BeginUpdateResource ():

"Le fichier binaire dans lequel les ressources de mise à jour. Une demande doit être en mesure d'obtenir un accès en écriture à ce fichier; le fichier référencé par pFileName ne peut pas être en cours d'exécution. "

En d'autres termes, il est impossible pour une application simplement mettre à jour ses propres ressources tout en cours d'exécution.

Il y a un certain nombre de stratégies que vous pouvez employer pour atteindre ce que vous voulez - ou quelque chose assez proche comme satisfaisant. Ce qui est le plus approprié dépendra de vos besoins précis.

De la multitude de solutions, peut-être deux:

1) Maintenir toutes ces ressources dans une DLL (seule ressource DLL - ne contenant pas de code réel en tant que telle) que vous ouvrez uniquement les ressources lors du chargement spécifique (ou les mettre à jour). Ainsi, au moment où vous souhaitez écrire un retour de ressources à la DLL, vous devriez être en mesure d'obtenir la protection en écriture nécessaire.

ou

2) Lorsque vous avez besoin de mettre à jour une ressource renommer le fichier EXE en cours d'exécution en cours à quelque chose comme « myapp.OLD », copiez-le afin que vous ayez un nouveau fichier avec le nom actuel « myapp.exe ». Vous pouvez ensuite mettre à jour « myapp.exe », car il est en fait « myapp.old » qui est en cours d'exécution.

Cette seconde approche est tout à fait en désordre et a une « mauvaise odeur », mais est une technique qui est (ou utilisé pour être) tout à fait couramment utilisés par les auto-updaters, par exemple. De toute évidence impliquera un redémarrage de votre application à un moment donné si le code de fonctionnement actuel est d'utiliser les ressources mises à jour dans le fichier EXE, donc il ne peut pas être modifiée appropriée à vos besoins.

Autres conseils

Autre chose à considérer est que le logiciel anti-virus peut signaler l'activité suspecte.

Penser à la réponse de Deltics Je pensais que vous pouvez également créer une application console qui écrit votre dos de ressources à la principale exe. Ainsi, votre principale exe enregistre les modifications de dans un fichier et extrait également l'application de la console. Lorsque l'application principale se termine appelle l'application de la console. L'application de la console attend pendant une courte période de temps et se lie alors le fichier de ressources à l'exécutable principal, supprime le fichier de ressources et lui-même. L'application de la console pourrait faire une vérification pour vous assurer que le fichier de ressources a été écrit avec succès et, sinon, laissez le ouvert fichier de ressources. L'exécutable principal pourrait voir le fichier de ressources lors du démarrage et de l'utiliser au lieu du fichier intégré -. Comme sauvegarde

Tout cela suppose une application unique de l'utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top