示例#1
0
        void bw_DoWorkUninstall(object sender, DoWorkEventArgs e)
        {
            List <UninstallFileInfo> filesToUninstall = new List <UninstallFileInfo>();
            List <string>            foldersToDelete  = new List <string>();
            List <RegChange>         registryToDelete = new List <RegChange>();
            List <UninstallFileInfo> comDllsToUnreg   = new List <UninstallFileInfo>();
            List <string>            servicesToStop   = new List <string>();

            // Load the list of files, folders etc. from the client file (Filename)
            RollbackUpdate.ReadUninstallData(Filename, filesToUninstall, foldersToDelete, registryToDelete, comDllsToUnreg, servicesToStop);

            // uninstall files
            foreach (UninstallFileInfo file in filesToUninstall)
            {
                try
                {
                    if (file.DeleteFile)
                    {
                        File.Delete(file.Path);
                    }
                }
                catch { }
            }

            //uninstall folders
            for (int i = foldersToDelete.Count - 1; i >= 0; i--)
            {
                //delete the last folder first (this fixes the problem of nested folders)
                try
                {
                    //directory must be empty in order to delete it
                    Directory.Delete(foldersToDelete[i]);
                }
                catch { }
            }


            // tell the sender that we're uninstalling reg now:
            bw.ReportProgress(0, new object[] { -1, -1, string.Empty, ProgressStatus.None, null });

            //uninstall registry
            foreach (RegChange reg in registryToDelete)
            {
                try
                {
                    reg.ExecuteOperation();
                }
                catch { }
            }

            // All done
            bw.ReportProgress(0, new object[] { -1, -1, string.Empty, ProgressStatus.Success, null });
        }