示例#1
0
 public void Write(Stream fs, bool comFiles)
 {
     if (comFiles)
     {
         fs.WriteByte(139);
     }
     else
     {
         fs.WriteByte(138);
     }
     WriteFiles.WriteDeprecatedString(fs, 1, Path);
     if (DeleteFile)
     {
         WriteFiles.WriteBool(fs, 2, val: true);
     }
     if (UnNGENFile)
     {
         WriteFiles.WriteBool(fs, 3, val: true);
         WriteFiles.WriteInt(fs, 4, (int)CPUVersion);
         WriteFiles.WriteInt(fs, 5, (int)FrameworkVersion);
     }
     if (RegisterCOMDll != 0)
     {
         WriteFiles.WriteInt(fs, 6, (int)RegisterCOMDll);
     }
     fs.WriteByte(154);
 }
示例#2
0
        public void Write(Stream fs, bool comFiles)
        {
            //beginning of the uninstall file info
            if (comFiles)
            {
                fs.WriteByte(0x8B);
            }
            else
            {
                fs.WriteByte(0x8A);
            }

            //path to the file
            WriteFiles.WriteDeprecatedString(fs, 0x01, Path);

            //delete the file?
            if (DeleteFile)
            {
                WriteFiles.WriteBool(fs, 0x02, true);
            }

            if (UnNGENFile)
            {
                WriteFiles.WriteBool(fs, 0x03, true);

                // the CPU version of the file to un-ngen
                WriteFiles.WriteInt(fs, 0x04, (int)CPUVersion);

                WriteFiles.WriteInt(fs, 0x05, (int)FrameworkVersion);
            }

            if (RegisterCOMDll != COMRegistration.None)
            {
                WriteFiles.WriteInt(fs, 0x06, (int)RegisterCOMDll);
            }

            //end of uninstall file info
            fs.WriteByte(0x9A);
        }
示例#3
0
        public static void WriteUninstallFile(string tempDir, string uninstallDataFile, List <UpdateFile> updateDetailsFiles)
        {
            string registryRollbackFile = Path.Combine(tempDir, "backup\\regList.bak");
            string filesRollbackFile    = Path.Combine(tempDir, "backup\\fileList.bak");
            string comRollbackFile      = Path.Combine(tempDir, "backup\\reggedComList.bak");
            string startedServicesFile  = Path.Combine(tempDir, "backup\\startedServices.bak");

            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>();

            //add files/folders/Registry from uninstall file
            try
            {
                if (File.Exists(uninstallDataFile))
                {
                    ReadUninstallFile(uninstallDataFile, filesToUninstall, foldersToDelete, registryToDelete, comDllsToUnreg, servicesToStop);
                }
            }
            catch { }


            // load COM Dlls to rollback
            if (File.Exists(comRollbackFile))
            {
                try
                {
                    ReadRollbackCOM(comRollbackFile, comDllsToUnreg);
                }
                catch { }
            }

            //add files/folders from rollback file
            if (File.Exists(filesRollbackFile))
            {
                List <string> rollbackFiles = new List <string>();

                try
                {
                    ReadRollbackFiles(filesRollbackFile, rollbackFiles, foldersToDelete, null);
                }
                catch { }

                //add files to the uninstall list
                foreach (string filename in rollbackFiles)
                {
                    filesToUninstall.Add(new UninstallFileInfo {
                        Path = filename, DeleteFile = true
                    });
                }
            }

            //add files to un-NGEN
            foreach (UpdateFile ngenedFile in updateDetailsFiles)
            {
                if (ngenedFile.IsNETAssembly)
                {
                    bool addFile = true;

                    for (int i = 0; i < filesToUninstall.Count; i++)
                    {
                        if (ngenedFile.Filename == filesToUninstall[i].Path)
                        {
                            if (!filesToUninstall[i].UnNGENFile)
                            {
                                // telling it to unNgen too
                                filesToUninstall[i].UnNGENFile = true;
                            }

                            //don't add the file, and stop searching for a match
                            addFile = false;
                            break;
                        }
                    }

                    if (addFile)
                    {
                        //add the file to the list
                        filesToUninstall.Add(new UninstallFileInfo {
                            Path = ngenedFile.Filename, UnNGENFile = true, CPUVersion = ngenedFile.CPUVersion
                        });
                    }
                }
            }

            //add registry from rollback file (just the entries that delete values or delete keys)
            if (File.Exists(registryRollbackFile))
            {
                try
                {
                    ReadRollbackRegistry(registryRollbackFile, registryToDelete);

                    //don't include any regchanges that aren't "RemoveKey" or "RemoveValue"
                    for (int i = 0; i < registryToDelete.Count; i++)
                    {
                        if (!(registryToDelete[i].RegOperation == RegOperations.RemoveKey || registryToDelete[i].RegOperation == RegOperations.RemoveValue))
                        {
                            registryToDelete.RemoveAt(i);
                            i--;
                        }
                    }
                }
                catch { }
            }

            // add services to stop
            if (File.Exists(startedServicesFile))
            {
                try
                {
                    ReadRollbackServices(startedServicesFile, servicesToStop, true);
                }
                catch { }
            }

            //write out the new uninstall data file
            if (filesToUninstall.Count != 0 || foldersToDelete.Count != 0 || registryToDelete.Count != 0)
            {
                using (FileStream fs = new FileStream(uninstallDataFile, FileMode.Create, FileAccess.Write))
                {
                    // Write any file-identification data you want to here
                    WriteFiles.WriteHeader(fs, "IUUFRV1");

                    //write COM files to uninstall
                    foreach (UninstallFileInfo file in comDllsToUnreg)
                    {
                        file.Write(fs, true);
                    }

                    //write files to delete
                    foreach (UninstallFileInfo file in filesToUninstall)
                    {
                        file.Write(fs, false);
                    }

                    //write folders to delete
                    foreach (string folder in foldersToDelete)
                    {
                        WriteFiles.WriteDeprecatedString(fs, 0x10, folder);
                    }

                    foreach (string service in servicesToStop)
                    {
                        WriteFiles.WriteString(fs, 0x11, service);
                    }

                    //write registry changes
                    foreach (RegChange reg in registryToDelete)
                    {
                        reg.WriteToStream(fs, true);
                    }

                    //end of file
                    fs.WriteByte(0xFF);
                }
            }
        }
示例#4
0
        public static void WriteUninstallFile(string tempDir, string uninstallDataFile, List <UpdateFile> updateDetailsFiles)
        {
            string text  = Path.Combine(tempDir, "backup\\regList.bak");
            string text2 = Path.Combine(tempDir, "backup\\fileList.bak");
            string text3 = Path.Combine(tempDir, "backup\\reggedComList.bak");
            string text4 = Path.Combine(tempDir, "backup\\startedServices.bak");
            List <UninstallFileInfo> list  = new List <UninstallFileInfo>();
            List <string>            list2 = new List <string>();
            List <RegChange>         list3 = new List <RegChange>();
            List <UninstallFileInfo> list4 = new List <UninstallFileInfo>();
            List <string>            list5 = new List <string>();

            try
            {
                if (File.Exists(uninstallDataFile))
                {
                    ReadUninstallFile(uninstallDataFile, list, list2, list3, list4, list5);
                }
            }
            catch
            {
            }
            if (File.Exists(text3))
            {
                try
                {
                    ReadRollbackCOM(text3, list4);
                }
                catch
                {
                }
            }
            if (File.Exists(text2))
            {
                List <string> list6 = new List <string>();
                try
                {
                    ReadRollbackFiles(text2, list6, list2, null);
                }
                catch
                {
                }
                foreach (string item in list6)
                {
                    list.Add(new UninstallFileInfo
                    {
                        Path       = item,
                        DeleteFile = true
                    });
                }
            }
            foreach (UpdateFile updateDetailsFile in updateDetailsFiles)
            {
                if (updateDetailsFile.IsNETAssembly)
                {
                    bool flag = true;
                    for (int i = 0; i < list.Count; i++)
                    {
                        if (updateDetailsFile.Filename == list[i].Path)
                        {
                            if (!list[i].UnNGENFile)
                            {
                                list[i].UnNGENFile = true;
                            }
                            flag = false;
                            break;
                        }
                    }
                    if (flag)
                    {
                        list.Add(new UninstallFileInfo
                        {
                            Path       = updateDetailsFile.Filename,
                            UnNGENFile = true,
                            CPUVersion = updateDetailsFile.CPUVersion
                        });
                    }
                }
            }
            if (File.Exists(text))
            {
                try
                {
                    ReadRollbackRegistry(text, list3);
                    for (int j = 0; j < list3.Count; j++)
                    {
                        if (list3[j].RegOperation != RegOperations.RemoveKey && list3[j].RegOperation != RegOperations.RemoveValue)
                        {
                            list3.RemoveAt(j);
                            j--;
                        }
                    }
                }
                catch
                {
                }
            }
            if (File.Exists(text4))
            {
                try
                {
                    ReadRollbackServices(text4, list5, addUnique: true);
                }
                catch
                {
                }
            }
            if (list.Count != 0 || list2.Count != 0 || list3.Count != 0)
            {
                using (FileStream fileStream = new FileStream(uninstallDataFile, FileMode.Create, FileAccess.Write))
                {
                    WriteFiles.WriteHeader(fileStream, "IUUFRV1");
                    foreach (UninstallFileInfo item2 in list4)
                    {
                        item2.Write(fileStream, comFiles: true);
                    }
                    foreach (UninstallFileInfo item3 in list)
                    {
                        item3.Write(fileStream, comFiles: false);
                    }
                    foreach (string item4 in list2)
                    {
                        WriteFiles.WriteDeprecatedString(fileStream, 16, item4);
                    }
                    foreach (string item5 in list5)
                    {
                        WriteFiles.WriteString(fileStream, 17, item5);
                    }
                    foreach (RegChange item6 in list3)
                    {
                        item6.WriteToStream(fileStream, embedBinaryData: true);
                    }
                    fileStream.WriteByte(byte.MaxValue);
                }
            }
        }
示例#5
0
        void SaveSelfUpdateData(string fileName)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
            {
                // Write any file-identification data you want to here
                fs.Write(System.Text.Encoding.UTF8.GetBytes("IUSUFV2"), 0, 7);

                //Client data file location
                WriteFiles.WriteDeprecatedString(fs, 0x01, clientFileLoc);

                //Server data file location
                WriteFiles.WriteDeprecatedString(fs, 0x02, serverFileLoc);

                //Client server file
                WriteFiles.WriteDeprecatedString(fs, 0x03, clientSFLoc);

                //Base Directory
                WriteFiles.WriteDeprecatedString(fs, 0x04, baseDirectory);

                //Temporary directory
                WriteFiles.WriteDeprecatedString(fs, 0x05, tempDirectory);

                //Old client file location (self)
                WriteFiles.WriteDeprecatedString(fs, 0x06, VersionTools.SelfLocation);

                //self update needed
                WriteFiles.WriteBool(fs, 0x07, SelfUpdateState == SelfUpdateState.WillUpdate);

                //check if the new client really has been elevated
                WriteFiles.WriteBool(fs, 0x08, needElevation);

                if (!string.IsNullOrEmpty(serverOverwrite))
                {
                    WriteFiles.WriteDeprecatedString(fs, 0x09, serverOverwrite);
                }

                if (!string.IsNullOrEmpty(updatePathVar))
                {
                    WriteFiles.WriteString(fs, 0x0C, updatePathVar);
                }

                if (!string.IsNullOrEmpty(customUrlArgs))
                {
                    WriteFiles.WriteString(fs, 0x0D, customUrlArgs);
                }

                if (!string.IsNullOrEmpty(forcedLanguageCulture))
                {
                    WriteFiles.WriteString(fs, 0x0E, forcedLanguageCulture);
                }

                if (isAutoUpdateMode)
                {
                    // is in automatic update mode
                    fs.WriteByte(0x80);
                }

                // we're updating from a service (i.e. skip ui mode)
                if (UpdatingFromService)
                {
                    fs.WriteByte(0x82);
                }

                if (!string.IsNullOrEmpty(customProxyUrl))
                {
                    WriteFiles.WriteString(fs, 0x0F, customProxyUrl);
                }

                if (!string.IsNullOrEmpty(customProxyUser))
                {
                    WriteFiles.WriteString(fs, 0x10, customProxyUser);
                }

                if (!string.IsNullOrEmpty(customProxyPassword))
                {
                    WriteFiles.WriteString(fs, 0x11, customProxyPassword);
                }

                if (!string.IsNullOrEmpty(customProxyDomain))
                {
                    WriteFiles.WriteString(fs, 0x12, customProxyDomain);
                }

                if (!string.IsNullOrEmpty(StartOnErr))
                {
                    WriteFiles.WriteString(fs, 0x13, StartOnErr);
                }

                if (!string.IsNullOrEmpty(StartOnErrArgs))
                {
                    WriteFiles.WriteString(fs, 0x14, StartOnErrArgs);
                }

                if (!string.IsNullOrEmpty(PasswordUpdateCmd))
                {
                    WriteFiles.WriteString(fs, 0x15, PasswordUpdateCmd);
                }

                fs.WriteByte(0xFF);
            }
        }