Newsgroup: it.comp.programmare.win32
Titolo: DLL di sistema da sostiuire

Salve a tutti,
    come faccio a sostituire una dll in uso?
Windows (ovviamente) mi blocca la dll che non posso cancellare,
sovrascrivere e/o
rinominare.
Suppongo ci sia la possibilità dato che i programmi di installazione lo
fanno!!
    grazie a tutti Ciao
                                                            danilo

 Suppongo ci sia la possibilitą dato che i programmi di installazione lo


 > Suppongo ci sia la possibilità dato che i programmi di installazione lo


o su Nt con file system fat16/32 non è possibile!
Il problema, comunque, e' a monte secondo me.
Cioe' : perche' vuoi cancellare le DLL di sistema ?


 I programmi d'installazione lo fanno (sostituire le dll) solo quando queste
non sono in uso dal sistema.
Nel qual caso i programmi d'installazione ti fanno riavviare il computer di
modo che sia possibile sostituire le dll quando non sono bloccate.
C'è una metodologia per informare Windows che al riavvio deve sostituire
delle librerie.
Se t'interessa solo sostituire una dll, la soluzione di Marco Jez è più che
sufficiente, se invece devi agire a livello di programma ti rimando alla
documentazione MSDN (il topic è "Replacing DLLs in Memory").
Al limite posso chiarire ulteriormente il funzionamento , dimmi tu.
Porlock

 wrote in message
news:mbvfvsguslkthlc9p...@4ax.com...


Ho illustrato nella risposta a Marco Jez  perchè non mi va bene, quel
procedimento
l'ho fatto centinaia di volte quando si poteva e lo conosco bene (windows lo
frego
spesso)!
Grazie comunque
Porlock <por...@CAVAMIfreemail.it> wrote in message
news:8t8thr$o51$1...@fe1.cs.interbusiness.it...



Da MSDN:
Spero ti sia utile non so se il sistema del file .INI funziona anche sotto
NT, prova.
Giacomo
Replacing DLLs in Memory
Installation programs often need to replace old .DLL files with new
versions. However, what if the DLL is already in memory? It is still
possible to replace the DLL. The method you use to replace DLLs in memory
depends on the platform. The installer, provides a mechanism for handling
files in use.
Windows NT/Windows 2000:
To replace DLLs already loaded in memory, use the MoveFileEx function.
BOOL MoveFileEx(
  LPCTSTR lpExistingFileName,  // file name
  LPCTSTR lpNewFileName,       // new file name
  DWORD dwFlags                // move options
);
Windows 95/98:
Windows 95/98 does not allow a .DLL file to be replaced if the DLL is
currently loaded into memory. To solve this problem, your installation
program must copy the new .DLL files to the user's machine, giving each new
.DLL file a temporary name that is different from that of the corresponding
old .DLL file. Your installation program must also copy a file called
WININIT.INI to the user's machine. The WININIT.INI file is processed by the
WININIT.EXE program when the system is restarted, before any DLLs are
loaded. The WININIT.INI file specifies the destination path and filename for
each new DLL.
The WININIT.INI file contains a [rename] section that specifies the source
and destination path and filenames for the new DLLs. The entries in the
[rename] section have the following syntax.
DestinationFileName=SourceFileName
The following syntax is used to delete a file.
NUL=SourceFileName
The following example shows a [rename] section from a WININIT.INI file.
[rename]
C:\WINDOWS\Fonts\arial.ttf=C:\WINDOWS\Fonts\arial.win
C:\WINDOWS\SYSTEM\advapi32.dll=C:\WINDOWS\SYSTEM\advapi32.tmp
When the system is restarted, it searches for a WININIT.INI file and, if it
finds one, runs WININIT.EXE on the file. After processing the file,
WININIT.EXE renames it to WININIT.BAK.
The DestinationFileName and SourceFileName must both be short (8.3) names
instead of long filenames because WININIT.EXE is a non-Windows application
and runs before the protected mode disk system is loaded. Because long
filenames are only visible when the protected mode disk system is loaded,
WININIT.EXE won't see them, and therefore, won't process them.

P.S. Laforgia? Sei pugliese?
Gia' ;)

Grazie lo stesso
usa un dischetto di avvio linux

 usare necessita di questa
Allora basta che tu copi la nuova versione della DLL nella directory di
esecuzione del tuo programma: Windows carichera` quella anziche` quella
memorizzata nella directory di sistema.
Comunque per rispondere alla tua domanda, esiste la funzione
MoveFileEx(), che con un flag apposito ti permette di effettuare la
copia subito dopo il prossimo reboot (quindi quando la DLL non e` ancora
in uso).
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

 wrote in message
news:m0jgvs407qlqi5dnb...@4ax.com...
