Domanda

vorrei memorizzare alcuni preferenze del programma XML come una risorsa in un'applicazione Delphi. La risorsa verrebbe modificato in base alle modifiche degli utenti. Non ho alcun problema creando l'XML e caricarlo come una risorsa, e può modificare XmlDocument che lo carico in, ma non so come scrivere sul retro del documento. Questo è anche possibile? Io preferirei non finire con 2 file alla fine (.exe e XML).

È stato utile?

Soluzione

La risposta è sì e no.

Sì, è possibile aggiornare le risorse in un binario utilizzando routine API di Windows. Questo collegamento a BeginUpdateResource () dovrebbe farti sulla strada giusta su questo punto.

Tuttavia, si noterà la seguente condizione sull'uso di BeginUpdateResource ():

"Il file binario in cui le risorse di aggiornamento. Un'applicazione deve essere in grado di ottenere l'accesso in scrittura a questo file; il file indicato da pFileName non può essere attualmente in esecuzione ".

In altre parole, non è possibile per un'applicazione semplicemente aggiornarlo proprie risorse durante l'esecuzione.

Ci sono una serie di strategie si potrebbe impiegare per ottenere ciò che si vuole - o qualcosa di abbastanza vicino ad esso, come per essere soddisfacente. Quale è la più appropriata dipende dalle vostre esigenze precise.

della moltitudine di soluzioni, due potrebbe essere:

1) Mantenere tutte queste risorse in una DLL (risorsa solo DLL - non contenente codice vero e proprio in quanto tale), che si apre solo quando specificamente il caricamento di risorse (o l'aggiornamento). Così, al momento si desidera scrivere un back risorsa alla DLL si dovrebbe essere in grado di ottenere il write-lock richiesto.

o

2) Quando è necessario aggiornare una risorsa rinominare il file EXE in esecuzione corrente di qualcosa come "myapp.OLD", copiarlo in modo da avere un nuovo file con il nome attuale "MyApp.exe". È quindi possibile aggiornare "MyApp.exe", perché è in realtà "myapp.old" che sta eseguendo.

Questo secondo approccio è piuttosto confusa e ha un "cattivo odore", ma è una tecnica che è (o era) abbastanza comunemente usati per auto-updater, per esempio. Ovviamente comporterà un riavvio della vostra applicazione ad un certo punto, se il codice in esecuzione attuale è quello di utilizzare le risorse aggiornate nel file EXE modificata, quindi non può essere adatta alle proprie necessità.

Altri suggerimenti

Un altro aspetto da considerare è che il software anti-virus può bandiera l'attività come sospetto.

Pensando risposta Deltics' Ho pensato che si potrebbe anche creare un'applicazione console che scrive la schiena di risorse alla exe principale. Così il vostro exe principale salva di modifiche a un file ed estrae anche il console app. Quando l'applicazione principale termina chiama la console app. La console app attende per un breve periodo di tempo e poi si lega il file di risorse per l'eseguibile principale, elimina il file di risorse e se stesso. L'applicazione console potrebbe fare un controllo per assicurarsi che il file di risorse è stato scritto con successo e, in caso contrario, lasciare il file di risorse aperto. L'eseguibile principale potrebbe vedere il file di risorse su di start up e utilizzarlo al posto del file incorporato -. Come salvaguardia

Tutto questo assume una singola applicazione utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top