Hello all,
I have a directory called Dlls which is having some dll files. I need to copy all these files on client directory and also register them. The problem is that the number of dll files in the Dlls directory is not fixed and so I can't hardcode there names. I am wondering if there is a way to copy and register each file one by one from the directory without hard coding anything.
Right now my code is
File "Dlls\ms.dll"
File "UTSDlls\msis.dll"
………
Copyfiles /silent $INSTDIR\ms.dll "C:\Program Files\DLLS"
Copyfiles /silent $INSTDIR\msis.dll "C:\Program Files\DLLS"
…………………
RegDLL "C:\Program Files\DLLS\ms.dll"
RegDLL "C:\Program Files\DLLS\msis.dll"
…………………….
As you can see all the files in Dlls directory are copied by hard coding there names.
I would really appreciate if someone can help me out.
Thanks,
Lucky
problem related to files and directories
9 posts
Take a look at Locate in the NSIS Manual . You may use it to find all *.dll in a directory and then register each dll.
thanks
Thanks dude,
I can now copy all files but I am still not sure how to register dlls without hard coding there names.
Thanks dude,
I can now copy all files but I am still not sure how to register dlls without hard coding there names.
Within the callback function that you pass to Locate, copy the file there and then register the file after copying it.
i didn't get what you wrote. Following is my code now
File "Dlls\*.dll"
Copyfiles /silent $INSTDIR\*.dll "C:\Program Files\DLLs"
My prob is what to write in
RegDLL "C:\Program Files\DLLs\?"
File "Dlls\*.dll"
Copyfiles /silent $INSTDIR\*.dll "C:\Program Files\DLLs"
My prob is what to write in
RegDLL "C:\Program Files\DLLs\?"
What you need to do is to look at Locate. Locate will allow you to search a directory (at runtime of your installer) for specific files and each time a file is found, you would just need to run RegDLL.
If more than just your DLL's will be in the output directory, than do the locate on the directory you were copying from and than just copy each file as Locate finds them and then register each.
!include 'FileFunc.nsh'
!insertmacro Locate
...
Section Blah
CopyFiles /silent $INSTDIR\*.dll "C:\Program Files\DLLs"
#locates all dll's in C:\Program Files\DLLs
${Locate} "C:\Program Files\DLLs" "/L=F /G=0 /M=*.dll" LocateCallback
SectionEnd
Function LocateCallback
#$R9 holds the absolute path of the file found
#register the DLL
FunctionEnd
Thanks goldy1064
Now I have one last prob i guess. Following is my code now -
File "Dlls\*.dll"
${Locate} "$INSTDIR\" "/L=F /G=0 /M=*.dll" LocateCallback
Function "LocateCallback"
Copyfiles /silent $R9 "C:\DLLs"
RegDLL $R9
FunctionEnd
I have more then one dll files but this function is called I guess only one time so only one dll gets copied and registered. Can you help me understand what’s going wrong.
Now I have one last prob i guess. Following is my code now -
File "Dlls\*.dll"
${Locate} "$INSTDIR\" "/L=F /G=0 /M=*.dll" LocateCallback
Function "LocateCallback"
Copyfiles /silent $R9 "C:\DLLs"
RegDLL $R9
FunctionEnd
I have more then one dll files but this function is called I guess only one time so only one dll gets copied and registered. Can you help me understand what’s going wrong.
The below code can be used to continue searching until no more files/directories are found.
Function LocateCallback
...
StrCmp $R9 "" 0 stop_locate
Push ""
goto end
stop_locate:
Push "StopLocate"
end:
FunctionEnd
Thanks
Thanks a lot dude.....
Thanks a lot dude.....