public bool Install(string destination_folder, PackageInstallerBase SelectedInstaller) { m_destination_folder = destination_folder; Engine.InstallerEngine.ReportProgress(LogLevel.Info, "Installing package contents to: " + destination_folder); m_files_unzipped = 0; var installedFiles = new List <string>(); bool installSucceeded = true; using (ZipFile f = OpenZipFile(m_package_path)) { ZipEntry packageEntry = null; foreach (ZipEntry entry in f) { if (0 == string.Compare("package.xml", entry.Name, true)) { packageEntry = entry; continue; } entry.Flags = (int)GeneralBitFlags.UnicodeText; string msg = ""; string destFile = Path.Combine(destination_folder, entry.Name); int percentComplete = (int)(100 * (double)m_files_unzipped++ / (double)Files.Count); installedFiles.Add(entry.Name); if (File.Exists(destFile)) { if (!SelectedInstaller.ShouldReplaceFile(destFile)) { msg = string.Format(" keeping local file '{0}'", destFile); continue; } } msg = string.Format(" installing '{0}'", destFile); if (entry.IsFile) { if (!ExtractFile(f, entry, destFile)) { installSucceeded = false; } } Engine.InstallerEngine.ReportProgress(LogLevel.Debug, msg, percentComplete); } // Install package.xml if (packageEntry != null && installSucceeded) { string packageXmlPath = Path.Combine(destination_folder, packageEntry.Name); if (!ExtractFile(f, packageEntry, packageXmlPath)) { installSucceeded = false; } // Add installed files to package.xml for future removal. var doc = new XmlDocument(); doc.Load(packageXmlPath); var installDirElement = doc.CreateElement("InstallFolder"); installDirElement.InnerText = destination_folder; doc.DocumentElement.AppendChild(installDirElement); var installedFilesElement = doc.CreateElement("InstalledFiles"); if (doc.DocumentElement != null) { doc.DocumentElement.AppendChild(installedFilesElement); foreach (var file in installedFiles) { var fileElement = doc.CreateElement("File"); fileElement.InnerText = file.Replace("/", "\\"); installedFilesElement.AppendChild(fileElement); } } doc.Save(packageXmlPath); } f.Close(); } // If install failed, try to rollback from the backup files. if (installSucceeded) { DeleteBackupFiles(); } else { Logger.Log(LogLevel.Info, "Installation failed; restoring backup files"); RestoreBackupFiles(); } return(installSucceeded); }
public bool Install(string destination_folder, PackageInstallerBase SelectedInstaller) { m_destination_folder = destination_folder; Engine.InstallerEngine.ReportProgress(LogLevel.Info, "Installing package contents to: " + destination_folder); m_files_unzipped = 0; var installedFiles = new List<string>(); bool installSucceeded = true; using (ZipFile f = OpenZipFile(m_package_path)) { ZipEntry packageEntry = null; foreach (ZipEntry entry in f) { if (0 == string.Compare("package.xml", entry.Name, true)) { packageEntry = entry; continue; } entry.Flags = (int)GeneralBitFlags.UnicodeText; string msg = ""; string destFile = Path.Combine(destination_folder, entry.Name); int percentComplete = (int)(100 * (double)m_files_unzipped++ / (double)Files.Count); installedFiles.Add(entry.Name); if (File.Exists(destFile)) { if (!SelectedInstaller.ShouldReplaceFile(destFile)) { msg = string.Format(" keeping local file '{0}'", destFile); continue; } } msg = string.Format(" installing '{0}'", destFile); if (entry.IsFile) if (!ExtractFile(f, entry, destFile)) installSucceeded = false; Engine.InstallerEngine.ReportProgress(LogLevel.Debug, msg, percentComplete); } // Install package.xml if (packageEntry != null && installSucceeded ) { string packageXmlPath = Path.Combine(destination_folder, packageEntry.Name); if (!ExtractFile(f, packageEntry, packageXmlPath)) installSucceeded = false; // Add installed files to package.xml for future removal. var doc = new XmlDocument(); doc.Load(packageXmlPath); var installDirElement = doc.CreateElement("InstallFolder"); installDirElement.InnerText = destination_folder; doc.DocumentElement.AppendChild(installDirElement); var installedFilesElement = doc.CreateElement("InstalledFiles"); if (doc.DocumentElement != null) { doc.DocumentElement.AppendChild(installedFilesElement); foreach (var file in installedFiles) { var fileElement = doc.CreateElement("File"); fileElement.InnerText = file.Replace("/", "\\"); installedFilesElement.AppendChild(fileElement); } } doc.Save(packageXmlPath); } f.Close(); } // If install failed, try to rollback from the backup files. if (installSucceeded) { DeleteBackupFiles(); } else { Logger.Log(LogLevel.Info, "Installation failed; restoring backup files"); RestoreBackupFiles(); } return installSucceeded; }