Sage.Extensibility.ExtensionInfo.Install C# (CSharp) Method

Install() public method

public Install ( ) : void
return void
        public void Install()
        {
            if (this.IsInstalled)
                this.Uninstall();

            InstallLog installLog = new InstallLog(DateTime.Now);

            log.DebugFormat("Installation of extension '{0}' started", this.Name);

            FileStream fs = File.OpenRead(this.ArchiveFileName);
            ZipFile extensionArchive = new ZipFile(fs);

            string backupDirectory = this.InstallDirectory + "." + DateTime.Now.Ticks;

            try
            {
                foreach (ExtensionFile file in this.AssetFiles)
                {
                    string childPath = file.Name;
                    string targetDir = Path.GetDirectoryName(file.InstallPath);

                    Directory.CreateDirectory(targetDir);

                    InstallItem entry = installLog.AddFile(file.InstallPath);
                    entry.CrcCode = Crc32.GetHash(extensionArchive.GetInputStream(file.Entry));

                    if (File.Exists(file.InstallPath))
                    {
                        if (Crc32.GetHash(file.InstallPath) != entry.CrcCode)
                        {
                            string backupPath = Path.Combine(backupDirectory, childPath);
                            log.WarnFormat("Extension {1}: file '{0}' seems modified, backing it up to '{2}'.",
                                file.InstallPath, this.Name, backupPath);

                            Directory.CreateDirectory(Path.GetDirectoryName(backupPath));
                            File.Copy(file.InstallPath, backupPath);
                        }
                    }

                    log.DebugFormat("Extracting '{0}' to '{1}'", file.Name, file.InstallPath);
                    file.Extract(extensionArchive, file.InstallPath);
                    entry.State = InstallState.Installed;
                }

                if (this.ConfigurationFile != null)
                {
                    this.ConfigurationFile.Extract(extensionArchive, this.ConfigurationFile.InstallPath);
                }

                installLog.Result = InstallState.Installed;
            }
            catch (Exception ex)
            {
                log.Error(ex);

                installLog.Error = ex;
                installLog.Result = InstallState.NotInstalled;

                this.Rollback(installLog);
            }
            finally
            {
                fs.Close();
                extensionArchive.Close();

                this.SaveLog(installLog);
            }

            log.DebugFormat("Installation of extension '{0}' {1}.", this.Name,
                installLog.Result == InstallState.Installed ? "succeeded" : "failed");
        }