jankofoed
27th January 2003 10:47 UTC
msvcrt.dll
I have tried to make a very small nsis script for upgrading a dll (msvcrt.dll). I use the macro UpgradeDLL from the documentation (Useful function, B.10). I can see in the registry that a pending rename function is inserted. Its intensions seems to be right. The syntax is a little cryptic (some ?? and a !).
I do not see any effect, the old msvcrt.dll version is kept.
I have tried to enable boot-logging, but I see nothing there.
I am using Windows 2000, and NSIS v2.0b0
Best regards,
Jan Eggert Kofoed
kichik
27th January 2003 11:32 UTC
Please attach the script and the registry key that is written (just copy and paste it).
jankofoed
27th January 2003 11:41 UTC
My script is as follows
-----------------------
!include jk.txt
Name "FORCE Technology (jk's test)"
InstallDir "c:\Programs\SimFlexNavigator"
OutFile jk.exe
Section ""
SetOutPath $INSTDIR
!insertmacro UpgradeDLL "msvcrt.dll" "$SYSDIR\msvcrt.dll"
SectionEnd
------------------------
I have a copy of msvcrt.dll where I run the scipts. I can see that the correct file is stored in the temp-directory.
With REGEDIT I find
Folder: My Computer/HKLM/SYSTEM/ControlSet001/Control/Session Manager
Name : PendingFileRenameOperations
Type : REG_MULTI_SZ
Data : \??\C:\DOCUME~1\ADMIN~1.PC0\LOCALS~1\Temp\nst1.tmp !\??\C:\WINNT\System32\msvcrt.dll
(Data is one long line).
Thank you very much for your quick respons.
Best regards,
Jan
kichik
27th January 2003 11:50 UTC
Is the temporary file deleted or does it stay in $TEMP?
BTW, that cryptic syntax is for NT's long paths.
jankofoed
27th January 2003 11:54 UTC
The file IS deleted from $TEMP, and the pending file rename is removed from the registry, so an attempt IS being made. I don't know whether the dll is locked very early on in the boot sequence.
(What I found cryptic was the use of ? and ! :-)
kichik
27th January 2003 12:07 UTC
I will test this later on my computer. For now, try using the latest CVS version.
jankofoed
27th January 2003 12:33 UTC
Thanx again for your very fast replies!!!
I have downloaded "Development Snapshot" dated 20020127 (i.e. today), and built all three projects, using the new version of makensis.exe and created a new installation (jk.exe). I get the same result.
The existing dll in c:/winnt/system32 is from May 2001, version 6.1.8924.0
The file nst1.tmp placed in (and subsequently removed from) $TEMP is version 6.1.9359.0
Best regards,
Jan
Joost Verburg
27th January 2003 13:42 UTC
The file is probably protected by Windows File Protection, so you can't upgrade it. Only Microsoft Service Packs can upgrade it.