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