public static IArchive Open(string filename, string password) {
var archive = ArchiveFactory.Open(filename);
if (password == null) return archive;
switch (archive.Type) {
case ArchiveType.Rar:
return RarArchive.Open(filename, new ReaderOptions { Password = password });
case ArchiveType.Zip:
return ZipArchive.Open(filename, new ReaderOptions { Password = password });
case ArchiveType.Tar:
case ArchiveType.SevenZip:
case ArchiveType.GZip:
throw new NotSupportedException(string.Format(ToolsStrings.ArchiveInstallator_UnsupportedEncryption, archive.Type));
default:
throw new ArgumentOutOfRangeException();
}
}