cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Tim_Mayert
Level 9

Dynamic linking of files bad for patches?

I am just starting to convert some of my IS 12 project to IS 2008 and I just wanted to know if there have been any fixes/updates with how Dynamic linking files works with patches.

With IS 12 and lower I have avoided dynamically linking to an of my project files folders because it seems that whenever I wanted to create a patch for one of these projects that it would always fail, stating that too many componets/files have changed from the previous version.

I just want to know if this works better in IS 2008 as I have a lot of files in some of my project folders and some of then do get updated on a regular basics. At least with files being added/deleted.

So if it does work better then I would perfer to go back to dynamic linking so that the developers do not always have to let me know if there have been files added/removed from the folder.

Thanks for any info.
Labels (1)
0 Kudos
(8) Replies
klacounte
Level 6

Did you populate the "Previous Package" setting in the release? My prior problems were due to dynamically linking sub-directories. Since you can't pick the key file for a dynamically linked sub directory I'd have to figure out what the key file was and modify it so that the other files in the component would get updated. I now pick my own key file for the components but dynamically include the other files.
0 Kudos
Tim_Mayert
Level 9

Okay so if there are sub folders you simply create a seperate component for each folder and you select one of the files in each of the folders to be the key file and the rest are dynamically linked?

What happens if the file you pick as to be the key file is one of the files that gets deleted during an update from the developers?

The one folder that I am linking to contains a single subfolder, at least so far, and there are currently about 160 files, but I know as development work more on it they will produce more files for this resource folder. I also have help folder that are html formated and there are many subfolders.

Oh and I also wanted to state that now of these folders contain .exe or .dll files so they should all go under single components without an issue right?

thanks,
0 Kudos
klacounte
Level 6

Okay so if there are sub folders you simply create a seperate component for each folder and you select one of the files in each of the folders to be the key file and the rest are dynamically linked?

Right. It was kind of a pain to do initially but the folder structure is pretty stable and doesn't change very often.

What happens if the file you pick as to be the key file is one of the files that gets deleted during an update from the developers?

I haven't run into this yet since we don't typically delete files in small updates. I have considered creating a dummy file or registry key for each component and using that as the key but I won't go there unless I have to. My current plan is to just leave the file until the next major release and delete it at that point.

The one folder that I am linking to contains a single subfolder, at least so far, and there are currently about 160 files, but I know as development work more on it they will produce more files for this resource folder. I also have help folder that are html formated and there are many subfolders.

My situation is probably similar to yours. We're installing around 5,000 files into about 85 directories so dynamic linking is a big help.

Oh and I also wanted to state that now of these folders contain .exe or .dll files so they should all go under single components without an issue right?

Right.
0 Kudos
Tim_Mayert
Level 9

Okay I'll give this another try and see if works better than before.

Thanks for your input.
0 Kudos
trevrobwhite
Level 4

Did you ever get anywhere with your dynamic file linking?

How I understand components if the key files doesn't change nothing gets delivered, however at the moment I'm getting the validation errors when trying to create a patch.

I basically have one dynamically linked folder for icons for the software which contains 415 files, more files may be added, some may change but they are rarely deleted (if ever).

IS Support wants me to create a new component for each one of those files which seems a bit extreme especially as component files says they can all be in the same component as they are only .png files.

What's the best way forward, I have patch optimisation set and I have make sure the previous MSI it references if the last version produced which I want to patch from.

You'd think MSI would be able to cope with this.

Any help would be appreciated.

Thanks.
0 Kudos
Tim_Mayert
Level 9

Hello trevrobwhite,

Well what I found out was that when you dynamically link files/folder without specifying a key file would make it to where everybuild it will have to generate a key file. So what I ended up doing, at least for our last version was not to use dynamically linked files and just include all files into a component for each folder and then set one of the files as a key file. This then made so that I could patch the install, but the problem was then if the developers placed new files/folders into the project that if they did not tell me then they would not be included in the install. I also had to let them know that they were not allowed to delete any of the files until we hit a major upgrade. This worked under most cased, but in some cases where there are shared files between projects I had to make sure those files were included as whole files in the patch.

So since you have a release already out you can either try including all files that the patch complains about as whole files in the patch or you may have to look at performing a major upgrade.

Anyways what I am trying with my new projects is to go back to dynamically linked files, at least per folder, but the main difference is that I have also created a versioned file that will be placed into each of these components as a whole file and this file is then set as the key file. So as long as the key file is always the same then the patch should work. At least I am hoping so because having to add 100/1000s of files individually and keeping track of the changes is a real pain.
0 Kudos
trevrobwhite
Level 4

Thanks for that, you'd think you'd be able to set in MSI that this component contains lots of files and to check each of them regardless of the key file status, especially useful when it comes to delivering documentation.

It sounds like you have the same problem I do, development do what they want to do and we just have to deliver it, no matter how much a nightmare it is. I've got installers delivering MySQL and populating the engine and they expect it to all update seamlessly, I've also got the problem that they will not create me any stand alone exe/dll files I can use as custom actions, so I have to write a mile of VbScript to do a simple function.

Anyhow, I'm getting off subject.

I've sort of found a way around this, I use the stand alone build engine and generate everything using VbScript, so I'm adding a function to create a list of checksums for each of my dynamic directories and when a new build is done the previous sum is compared (this is my key file), if the sums change the key file is replaced and MSI will deliver my updated component.

I'll paste the code here, its not brilliant but it does the job, you will need MD5Deep from here: http://md5deep.sourceforge.net/
Put MD5Deep in the path (or alter the script)


Function CheckDynDir ( Dir, KeyFile, filter )
' Checks Dynamic Installer Directories
' First looks for known sum file, if its there it does a match, if not creates one
' If the match fails then a new sum file is created

msgbox"Check Dynamic Directory Checking on Directory {" & Dir & "}"
TmpFile = "C:\md5.txt" & chr(34)
msgbox "Tmp File {" & TmpFile & "}"
ShellObj.CurrentDirectory = Dir
msgbox KeyFile


if ( fso.FileExists ( KeyFile )) then
' File exists - perform matching
ShellObj.Run "cmd /c md5deep -x " & chr(34) & KeyFile & chr(34) & " " & filter & " > " & chr(34) & TmpFile & chr(34), 0, True
' Check to see if the output file contains anything - can't use fso as it can't cope with 0 byte files - use WMI
Set objTmpFile = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2:CIM_DataFile.Name='" & TmpFile & "'")

if (objTmpFile.filesize = 0 ) then
' No Differences
msgbox "No Differences Between Checkouts"
else

msgbox"Files Changes - Re-generate Sums..."
command = "cmd /c md5deep -r " & filter & " > " & chr(34) & KeyFile & chr(34)

ShellObj.Run command, 0, True
end if

else
' File does not exist - Create File
msgbox"Previous Sum File Not Found - Re-generate Sums..."
ShellObj.Run "cmd /c md5deep " & filter & " > " & chr(34) & KeyFile & chr(34), 0, True
end if

fso.DeleteFile ( TmpFile )


End Function




There's quite a bit of debug it in, just hash out the msgbox lines if you don't want the prompts.
0 Kudos
KennethK
Level 2

Running into the same problem with dynamic linking and upgrades of many files. Did you ever reach a conclusion on how to handle this? We have many files and folders so dynamic linking is a significant advantage. Also notice that there are posts about IS 2009 solving this issue…any experience with this? Any patches from IS to fix dynamic linking in 2008
0 Kudos