software, productivity & more
Deleting files left after installing vcredist_x86.exe using ‘Inno Setup’
VC Redistribulables from VC++ 2008 (9.0) installs temporary files in system root directory. This is a known bug as mentioned in this Microsoft’s KB Article 950683.
Actually, it installs temporary files in the drive with maximum free space (not the system root).
Until Microsoft fixes it in VC 2008 SP1, we will need to find our own workaround. Here is an ‘Inno Setup’ script that deletes the 24 temporary files from the drive with maximum free space.
We do not find which drive has maximum free space. Instead we just check each drive from C:\ to M:\ for a subset of files. If they exist, then we start deleting all the 24 files.
Update: The 64 bit version of the redistributable vcredist_x64.exe also has the same problem. Also, they seem to have fixed this problem in VC++ 2008 Redistributables SP1. I haven’t tested it yet because its size has bloated up from 1.7 MB to 4 MB.
Here is the code
procedure DeleteVCRedistRuntimeTemporaryFiles();
var
i : Integer;
byCounter : Byte;
byDrive : Byte;
strFile1, strFile2, strFile3 : String;
strRootDrivePath : String;
//totally there are 24 files to be deleted
arrFiles : Array [1..24] Of String;
begin
//We will check the following root drives
//C, D, E, F, G, H, I, J, K, L, M
For byCounter := 67 to 77 do
Begin
strRootDrivePath := Chr(byCounter) + ':\';
arrFiles[1] := strRootDrivePath + 'vcredist.bmp';
arrFiles[2] := strRootDrivePath + 'VC_RED.cab';
arrFiles[3] := strRootDrivePath + 'VC_RED.MSI';
//If these 3 files then we have found the right
//drive in which the VC runtime files are extracted
If (FileExists(arrFiles[1]) And
FileExists(arrFiles[2]) And
FileExists(arrFiles[3])) Then
Begin
arrFiles[4] := strRootDrivePath + 'eula.1028.txt';
arrFiles[5] := strRootDrivePath + 'eula.1031.txt';
arrFiles[6] := strRootDrivePath + 'eula.1033.txt';
arrFiles[7] := strRootDrivePath + 'eula.1036.txt';
arrFiles[8] := strRootDrivePath + 'eula.1040.txt';
arrFiles[9] := strRootDrivePath + 'eula.1041.txt';
arrFiles[10] := strRootDrivePath + 'eula.1042.txt';
arrFiles[11] := strRootDrivePath + 'eula.2052.txt';
arrFiles[12] := strRootDrivePath + 'eula.3082.txt';
arrFiles[13] := strRootDrivePath + 'globdata.ini';
arrFiles[14] := strRootDrivePath + 'install.exe';
arrFiles[15] := strRootDrivePath + 'install.ini';
arrFiles[16] := strRootDrivePath + 'install.res.1028.dll';
arrFiles[17] := strRootDrivePath + 'install.res.1031.dll';
arrFiles[18] := strRootDrivePath + 'install.res.1033.dll';
arrFiles[19] := strRootDrivePath + 'install.res.1036.dll';
arrFiles[20] := strRootDrivePath + 'install.res.1040.dll';
arrFiles[21] := strRootDrivePath + 'install.res.1041.dll';
arrFiles[22] := strRootDrivePath + 'install.res.1042.dll';
arrFiles[23] := strRootDrivePath + 'install.res.2052.dll';
arrFiles[24] := strRootDrivePath + 'install.res.3082.dll';
For i := 1 to 24 Do
Begin
DeleteFile(arrFiles[i]);
End;
//Now that we have found and deleted all the files
//we will break
Break;
End;
End;
End;
procedure DeinitializeSetup();
begin
DeleteVCRedistRuntimeTemporaryFiles();
end;
| Print article |
about 3 years ago
THANK YOU!!!! This has been a pain in my ass for months!!!! I’m curious tho, is this still a problem with the SP1 release of this redist? I haven’t bothered with it yet, just curious if you know.
about 3 years ago
Thanks Kevin
In one of the Microsoft bug report, I read that this problem has been fixed in SP1.
Good that I was not aware of SP1 until I saw your comment. Because SP1 is 4 MB. And the earlier VC++ 2008 Redistributable is only 1.7 MB. I would continue to use the smaller redistributable and use the above code to delete the temporary files. I am surprise by the size difference. Not sure what they have added to SP1 that it has become so big.
about 3 years ago
Thank you so much!
about 1 year ago
Maybe a bit late reply but I can confirm there arent any files left now on my D drive (hast most space available) from the installation
about 1 year ago
(Using the SP1 version that is)