1

Тема: JScript: удаление заданного раздела реестра вместе с подразделами

JS альтернатива VBScript: удаление заданного раздела реестра вместе с подразделами

// Удаление ключа реестра (включая все вложенные)
function RegDeleteKeys(strFullPath){
	function DeleteSubkeys (subKey){
		var oMethod = oReg.Methods_.Item("EnumKey");
		var oInParam = oMethod.InParameters.SpawnInstance_();
		oInParam.hDefKey = defKey;
		oInParam.sSubKeyName = subKey;
		var oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
		if (oOutParam.sNames != null) {
			var aNames = oOutParam.sNames.toArray();
			for (var i=0, keyName; keyName = aNames[i++];) {
				DeleteSubkeys(subKey + "\\" + keyName);
			}
		}
		oReg.DeleteKey (defKey, subKey);
	}
	// ----------------------------------------------------------------
	var aKeyPath = strFullPath.match(/^([\w_]+)\\(.+)$/);
	if (!aKeyPath) return;
	var aRoot = {HKEY_LOCAL_MACHINE:  0x80000002, HKLM: 0x80000002
				,HKEY_USERS:          0x80000003, HKU:  0x80000003
				,HKEY_CURRENT_USER:   0x80000001, HKCU: 0x80000001
				,HKEY_CLASSES_ROOT:   0x80000000, HKCR: 0x80000000
				,HKEY_CURRENT_CONFIG: 0x80000005, HKCC: 0x80000005}
	var defKey = aRoot[aKeyPath[1]];
	if (!defKey) return;
	var oReg = GetObject("winmgmts:\\\\.\\root\\default:StdRegProv");
	DeleteSubkeys (aKeyPath[2]);
}

В качестве параметра принимает удаляемый ключ (полностью, включая root). Например, так:

RegDeleteKeys("HKCR\\xslfile\\shell\\Open\\ddeexec");
// или так:
RegDeleteKeys("HKEY_CURRENT_USER\\Console");
// не советую запускать эти примеры не поразмыслив хорошенько ;)