private bool OnPackageSaveRecursive(TreeNodeCollection curNodes) { foreach (FolderTreeNode curFolder in curNodes) { if (curFolder.deleted) // Deleted Folder { virtPackage.DeleteFile(treeHelper.GetFullNodeName((TreeNode)curFolder)); // Stop recursing inside this node } else { if (curFolder.childFiles != null) { foreach (FileData child in curFolder.childFiles) { if (child.deleted) // Deleted File { String findFile = child.virtFsNode.FileName; Boolean findDeleted = false; if (!curFolder.childFiles.Exists( delegate(FileData data) { return(data.virtFsNode.FileName.Equals(findFile, StringComparison.CurrentCultureIgnoreCase) && data.deleted == findDeleted); })) { // only delete if no new file is added with same name. // the virtPackage will automaticaly replace it when AddFile is called. virtPackage.DeleteFile(child.virtFsNode.FileName); } } else { if (child.addedFrom != "") { // Added File virtPackage.AddFileEx(child.addedFrom, child.virtFsNode.FileName, false, (VIRT_FILE_FLAGS)child.virtFsNode.FileFlags); } virtPackage.SetFileFlags(child.virtFsNode.FileName, child.virtFsNode.FileFlags); } } } if (curFolder.addedEmpty) { virtPackage.AddEmptyDir(treeHelper.GetFullNodeName((TreeNode)curFolder), false); } OnPackageSaveRecursive(curFolder.Nodes); } } return(true); }
private void PopulateSubKeys(RegistryKey parentKey, String subKeyName, TreeNode curNode) { //if (subKeyName == "") return; // No virtual registry exists (programs with no registry modifications) RegistryKey curKey = parentKey.OpenSubKey(subKeyName, false); if (curKey == null) { return; // Should never happen } String[] subKeys = curKey.GetSubKeyNames(); foreach (String subKey in subKeys) { TreeNode newNode; /*if (curNode == null) // Very first tree node * newNode = fsFolderTree.Nodes.Add(subKey); * else*/ newNode = curNode.Nodes.Add(subKey); // Update image String fullName = treeHelper.GetFullNodeName(newNode); UInt32 sandboxFlags = virtPackage.GetRegistrySandbox(fullName, false); treeHelper.SetFolderNodeImage(newNode, false, false, sandboxFlags); // Recurse PopulateSubKeys(curKey, subKey, newNode); } // Add values /*Items := TStringList.Create; * Reg.GetValueNames(Items); * For I:=0 To Items.Count-1 Do Begin * NewNode := TreeView.Items.AddChild(CurNode, Items[I]); * SetNodeImage(NewNode, IMG_FILE); * End;*/ curKey.Close(); }