activescott / lessmsi

A tool to view and extract the contents of an Windows Installer (.msi) file.
https://lessmsi.activescott.com
MIT License
1.29k stars 150 forks source link

Unable to "Copy" non-embedded CAB file in same folder as MSI, if Source Path = Destination Path #169

Closed hairycactus closed 2 years ago

hairycactus commented 2 years ago

Observed Behaviour:

LessMSI is unable to detect non-embedded/ external CAB file located in the same folder as the MSI file -- if the output folder path is the same as the source folder containing both the MSI & CAB files.

Eg.
Source Folder: X:\Temp\SourceMSI\ (containing MSI & CAB files)
Destination Folder: X:\Temp\SourceMSI\

Depending on the specific MSI & accompanying CAB files, LessMSI either fails to extract anything at all, or only creates several MSM files (ie. X:\Temp\SourceMSI\*.MSM) without creating a \SourceDir\ subfolder at the destination path.

Tested: LessMSI v1.8.1 (14 Jan 2021) & v1.8.2 (19 Sep 2021)
OS: Win 10 x64

Expected Behaviour:

LessMSI should extract the MSI file contents to the X:\Temp\SourceMSI\SourceDir\ subfolder -- like how it typically does for other types of MSI files.

Sample Files:

MS Visual C++ 2005 SP1 MFC Security Update (14 May 2011)
MS Visual C++ 2008 SP1 MFC Security Update (19 Apr 2011)

Steps to Reproduce:

  1. Use 7-zip to extract the the respective EXE file's MSI & CAB files to a folder.
  2. Drag-drop the MSI file to LessMSI's File field.
  3. Click Extract.

Screenshot:

LessMSI CAB Error

Error Message:

  Error copying file 'D:\zTempDownloads\MSVisualC++Redistb2005SP1x32-MFCSecurityUpdate\vcredis1.cab' to 'D:\zTempDownloads\MSVisualC++Redistb2005SP1x32-MFCSecurityUpdate\vcredis1.cab'.  
System error information:'The operation completed successfully.'
  Technical Detail:
     at LessIO.Strategies.Win32.Win32FileSystemStrategy.Copy(Path source, Path dest)  
     at LessIO.FileSystem.Copy(Path source, Path dest)  
     at LessMsi.Msi.Wixtracts.CabsFromMsiToDisk(Path msi, Database msidb, String outputDir)  
     at LessMsi.Msi.Wixtracts.ExtractFiles(Path msi, String outputDir, MsiFile[] filesToExtract, AsyncCallback progressCallback)  
     at LessMsi.Gui.MainForm.btnExtract_Click(Object sender, EventArgs e)

Ref: #129, #164

activescott commented 2 years ago

:tada: This issue has been resolved in version 1.8.3 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

activescott commented 2 years ago

@hairycactus Thanks for reporting. This should be fixed in the newest release.