win自动化分类添加进程管理、注册表管理、服务管理、软件管理和系统工具

This commit is contained in:
fofolee
2025-01-14 16:24:12 +08:00
parent ab5f90ea51
commit 64e231d5cb
12 changed files with 2593 additions and 0 deletions

View File

@@ -0,0 +1,357 @@
using System;
using System.Text;
using Microsoft.Win32;
using System.Collections.Generic;
using System.Web.Script.Serialization;
public class RegistryManager
{
public static void Main(string[] args)
{
if (args.Length == 0 || args[0] == "-h" || args[0] == "--help")
{
ShowHelp();
return;
}
string type = GetArgumentValue(args, "-type");
if (string.IsNullOrEmpty(type))
{
Console.Error.WriteLine("Error: 必须指定操作类型 (-type)");
return;
}
try
{
string path = GetArgumentValue(args, "-path");
string name = GetArgumentValue(args, "-name");
string value = GetArgumentValue(args, "-value");
string valueType = GetArgumentValue(args, "-valuetype");
if (valueType == null)
{
valueType = "string";
}
else
{
valueType = valueType.ToLower();
}
switch (type.ToLower())
{
case "get":
if (string.IsNullOrEmpty(path))
{
Console.Error.WriteLine("Error: 必须指定注册表路径 (-path)");
return;
}
GetValue(path, name);
break;
case "set":
if (string.IsNullOrEmpty(path) || string.IsNullOrEmpty(name))
{
Console.Error.WriteLine("Error: 必须指定注册表路径 (-path) 和键名 (-name)");
return;
}
SetValue(path, name, value, valueType);
break;
case "delete":
if (string.IsNullOrEmpty(path))
{
Console.Error.WriteLine("Error: 必须指定注册表路径 (-path)");
return;
}
DeleteValue(path, name);
break;
case "list":
if (string.IsNullOrEmpty(path))
{
Console.Error.WriteLine("Error: 必须指定注册表路径 (-path)");
return;
}
ListKeys(path);
break;
default:
Console.Error.WriteLine("Error: 不支持的操作类型");
break;
}
}
catch (Exception ex)
{
Console.Error.WriteLine(string.Format("Error: {0}", ex.Message));
}
}
private static void GetValue(string path, string name)
{
using (RegistryKey key = OpenRegistryKey(path))
{
if (key != null)
{
object value = key.GetValue(name);
if (value != null)
{
var info = new Dictionary<string, string>();
info["path"] = path.Replace("\\", "\\\\");
info["name"] = name;
info["value"] = value.ToString();
info["type"] = key.GetValueKind(name).ToString();
var serializer = new JavaScriptSerializer();
Console.Write(serializer.Serialize(info));
return;
}
}
}
Console.Error.WriteLine("Error: 找不到指定的注册表值");
}
private static void SetValue(string path, string name, string value, string valueType)
{
using (RegistryKey key = OpenRegistryKey(path, true))
{
if (key == null)
{
throw new Exception("找不到指定的注册表项");
}
object typedValue = ConvertValue(value, valueType);
RegistryValueKind kind = GetValueKind(valueType);
key.SetValue(name, typedValue, kind);
Console.WriteLine("成功设置注册表值");
}
}
private static void DeleteValue(string path, string name)
{
using (RegistryKey key = OpenRegistryKey(path, true))
{
if (key == null)
{
throw new Exception("找不到指定的注册表项");
}
if (string.IsNullOrEmpty(name))
{
// 删除整个键
Registry.LocalMachine.DeleteSubKeyTree(GetRelativePath(path), false);
Console.WriteLine("成功删除注册表项");
}
else
{
// 删除指定值
key.DeleteValue(name, false);
Console.WriteLine("成功删除注册表值");
}
}
}
private static void ListKeys(string path)
{
var result = new List<Dictionary<string, string>>();
using (RegistryKey key = OpenRegistryKey(path))
{
if (key != null)
{
foreach (string subKeyName in key.GetSubKeyNames())
{
var info = new Dictionary<string, string>();
info["path"] = (path + "\\" + subKeyName).Replace("\\", "\\\\");
info["name"] = subKeyName;
result.Add(info);
}
}
}
var serializer = new JavaScriptSerializer();
Console.Write(serializer.Serialize(result));
}
private static RegistryKey OpenRegistryKey(string path, bool writable = false)
{
string[] parts = path.Split('\\');
if (parts.Length < 2)
{
throw new Exception("无效的注册表路径");
}
RegistryKey root = GetRootKey(parts[0]);
string subPath = string.Join("\\", parts, 1, parts.Length - 1);
return root.OpenSubKey(subPath, writable);
}
private static RegistryKey GetRootKey(string name)
{
switch (name.ToUpper())
{
case "HKLM":
case "HKEY_LOCAL_MACHINE":
return Registry.LocalMachine;
case "HKCU":
case "HKEY_CURRENT_USER":
return Registry.CurrentUser;
case "HKCR":
case "HKEY_CLASSES_ROOT":
return Registry.ClassesRoot;
case "HKU":
case "HKEY_USERS":
return Registry.Users;
case "HKCC":
case "HKEY_CURRENT_CONFIG":
return Registry.CurrentConfig;
default:
throw new Exception("无效的注册表根键");
}
}
private static string GetRelativePath(string path)
{
string[] parts = path.Split('\\');
if (parts.Length < 2)
{
throw new Exception("无效的注册表路径");
}
return string.Join("\\", parts, 1, parts.Length - 1);
}
private static void OutputValue(string name, object value, RegistryValueKind kind)
{
string valueStr = FormatValue(value, kind);
Console.WriteLine(string.Format("{{\"type\": \"value\", \"name\": \"{0}\", \"value\": {1}, \"valueType\": \"{2}\"}}",
name.Replace("\"", "\\\""),
valueStr,
kind.ToString()));
}
private static string FormatValue(object value, RegistryValueKind kind)
{
switch (kind)
{
case RegistryValueKind.String:
case RegistryValueKind.ExpandString:
return string.Format("\"{0}\"", value.ToString().Replace("\"", "\\\""));
case RegistryValueKind.MultiString:
return string.Format("[{0}]", string.Join(",", Array.ConvertAll(
(string[])value,
s => string.Format("\"{0}\"", s.Replace("\"", "\\\"")))));
case RegistryValueKind.Binary:
return string.Format("[{0}]", string.Join(",", (byte[])value));
default:
return value.ToString();
}
}
private static object ConvertValue(string value, string valueType)
{
switch (valueType)
{
case "string":
return value;
case "dword":
return int.Parse(value);
case "qword":
return long.Parse(value);
case "binary":
return Array.ConvertAll(value.Split(','), byte.Parse);
case "multistring":
return value.Split(',');
case "expandstring":
return value;
default:
throw new Exception("不支持的值类型");
}
}
private static RegistryValueKind GetValueKind(string valueType)
{
switch (valueType)
{
case "string":
return RegistryValueKind.String;
case "dword":
return RegistryValueKind.DWord;
case "qword":
return RegistryValueKind.QWord;
case "binary":
return RegistryValueKind.Binary;
case "multistring":
return RegistryValueKind.MultiString;
case "expandstring":
return RegistryValueKind.ExpandString;
default:
throw new Exception("不支持的值类型");
}
}
private static void ShowHelp()
{
string help = @"
Windows 注册表管理工具使用说明
======================
基本语法:
registry.exe -type <操作类型> [参数...]
操作类型:
--------
1. get - 获取注册表值
参数:
-path <注册表路径> 完整的注册表路径
-name <值名称> 要获取的值名称(可选,不指定则列出所有值)
示例:
registry.exe -type get -path ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion"" -name ""ProgramFilesDir""
2. set - 设置注册表值
参数:
-path <注册表路径> 完整的注册表路径
-name <值名称> 要设置的值名称
-value <值> 要设置的值
-valuetype <类型> 值类型可选默认为string
支持的类型string, dword, qword, binary, multistring, expandstring
示例:
registry.exe -type set -path ""HKCU\Software\MyApp"" -name ""Setting"" -value ""123"" -valuetype dword
3. delete - 删除注册表项或值
参数:
-path <注册表路径> 完整的注册表路径
-name <值名称> 要删除的值名称(可选,不指定则删除整个键)
示例:
registry.exe -type delete -path ""HKCU\Software\MyApp"" -name ""Setting""
4. list - 列出注册表项下的所有子项和值
参数:
-path <注册表路径> 完整的注册表路径
示例:
registry.exe -type list -path ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion""
返回值:
------
JSON格式的注册表信息
键:{""type"": ""key"", ""name"": ""键名""}
值:{""type"": ""value"", ""name"": ""值名"", ""value"": 值, ""valueType"": ""值类型""}
注意事项:
--------
1. 需要管理员权限才能修改系统关键注册表项
2. 注册表路径必须以根键开头HKLM、HKCU、HKCR、HKU、HKCC
3. 修改注册表可能会影响系统稳定性,请谨慎操作
4. 建议在修改前备份重要的注册表项
";
Console.WriteLine(help);
}
private static string GetArgumentValue(string[] args, string key)
{
for (int i = 0; i < args.Length - 1; i++)
{
if (args[i].Equals(key, StringComparison.OrdinalIgnoreCase))
{
return args[i + 1];
}
}
return null;
}
}