Update ZipExtractor.cs

This commit is contained in:
Namhyeon Go 2025-05-17 03:56:45 +09:00
parent 753ef4c6e5
commit 1c678ba7ae

View File

@ -42,12 +42,6 @@ namespace WelsonJS.Launcher
ExtractCommand = (src, dest) => $"-ext2simple \"{src}\" \"{dest}\"" ExtractCommand = (src, dest) => $"-ext2simple \"{src}\" \"{dest}\""
}, },
new Extractor new Extractor
{
Name = "tar (Windows)",
FileName = "tar.exe",
ExtractCommand = (src, dest) => $"-xf \"{src}\" -C \"{dest}\""
},
new Extractor
{ {
Name = "WinZip", Name = "WinZip",
FileName = "wzunzip.exe", FileName = "wzunzip.exe",
@ -64,6 +58,18 @@ namespace WelsonJS.Launcher
Name = "Bandizip", Name = "Bandizip",
FileName = "Bandizip.exe", FileName = "Bandizip.exe",
ExtractCommand = (src, dest) => $"x -o:\"{dest}\" \"{src}\" -y" ExtractCommand = (src, dest) => $"x -o:\"{dest}\" \"{src}\" -y"
},
new Extractor
{
Name = "tar (Windows)", // Windows 10 build 17063 or later
FileName = "tar.exe",
ExtractCommand = (src, dest) => $"-xf \"{src}\" -C \"{dest}\""
},
new Extractor
{
Name = "unzip", // Info-ZIP, Cygwin
FileName = "unzip.exe",
ExtractCommand = (src, dest) => $"\"{src}\" -d \"{dest}\" -o"
} }
}; };
@ -86,12 +92,16 @@ namespace WelsonJS.Launcher
foreach (var extractor in AvailableExtractors.Where(e => e.Path != null)) foreach (var extractor in AvailableExtractors.Where(e => e.Path != null))
{ {
if (RunProcess(extractor.Path, extractor.ExtractCommand(filePath, workingDirectory))) if (RunProcess(extractor.Path, extractor.ExtractCommand(filePath, workingDirectory)))
{
return true; return true;
}
} }
return ExtractUsingShell(filePath, workingDirectory); if (ExtractUsingPowerShell(filePath, workingDirectory))
return true;
if (ExtractUsingShell(filePath, workingDirectory))
return true;
return false;
} }
private bool IsValidFile(string filePath) private bool IsValidFile(string filePath)
@ -157,7 +167,9 @@ namespace WelsonJS.Launcher
} }
} }
} }
catch { } catch {
// ignore an exception
}
} }
} }
@ -181,6 +193,15 @@ namespace WelsonJS.Launcher
} }
} }
private bool ExtractUsingPowerShell(string filePath, string workingDirectory)
{
var escapedSrc = filePath.Replace("'", "''");
var escapedDest = workingDirectory.Replace("'", "''");
var script = $"Expand-Archive -LiteralPath '{escapedSrc}' -DestinationPath '{escapedDest}' -Force";
return RunProcess("powershell.exe", $"-NoProfile -Command \"{script}\"");
}
private bool ExtractUsingShell(string filePath, string workingDirectory) private bool ExtractUsingShell(string filePath, string workingDirectory)
{ {
var shellAppType = Type.GetTypeFromProgID("Shell.Application"); var shellAppType = Type.GetTypeFromProgID("Shell.Application");