/// <summary>
/// 注册表主键枚举
/// </summary>
public enum RootKey : uint
{
HKEY_CLASSES_ROOT = 0x80000000,
HKEY_CURRENT_USER = 0x80000001,
HKEY_LOCAL_MACHINE = 0x80000002,
HKEY_USERS = 0x80000003,
HKEY_CURRENT_CONFIG = 0x80000005
}
/// <summary>
/// 端机信息结构
/// </summary>
public struct ServerInfo
{
public string ServerID;
public string ServerSec;
public string ServerIP;
public string ServerUser;
public string ServerPw;
/// <summary>
/// 远程推送的目标目录
/// </summary>
public string FolderPath;
/// <summary>
/// 远程共享名?
/// </summary>
public string ShareName;
/// <summary>
/// 远程推送的说明
/// </summary>
public string Description;
/// <summary>
/// 远程推送的文件集合
/// </summary>
public string [] strSource;
/// <summary>
/// 推送成功后,要设置的注册表自动启动项名称
/// </summary>
public string strTarget;
/// <summary>
/// 传送类型
/// </summary>
public int transType;
public bool Result;
}
/// <summary>
/// 用于WMI连接的用户信息结构
/// </summary>
public struct UserInfo
{
public string UserName;
public string UserPW;
public bool IsEnable;
}
/// <summary>
/// WMI基本封装
/// </summary>
public class WmiShareFunction
{
public static CLog Wmilog = new CLog(Application.StartupPath + @"\\AppLogs\\Wmi.log");
/// <summary>
/// 创建远程目录
/// </summary>
/// <param name="scope">ManagementScope Instance</param>
/// <param name="DirectoryName">要建立的目录名</param>
/// <param name="CurrentDirectory">根目录所在位置,缺省为C:\</param>
/// <returns>0表示建立成功,-1表示建立失败</returns>
public static int CreateRemoteDirectory(ManagementScope scope, string DirectoryName, string CurrentDirectory)
{
try
{
string currentDirectory = CurrentDirectory;
if (String.IsNullOrEmpty(CurrentDirectory))
{
currentDirectory = @"C:\";
}
ObjectGetOptions objectGetOptions = new ObjectGetOptions(null, System.TimeSpan.MaxValue, true);
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processBatch = new ManagementClass(scope, managementPath, objectGetOptions);
ManagementBaseObject inParams = processBatch.GetMethodParameters("Create");
inParams["CommandLine"] = @"cmd /CMd " + DirectoryName;
inParams["CurrentDirectory"] = currentDirectory;
ManagementBaseObject outParams = null;
outParams = processBatch.InvokeMethod("Create", inParams, null);
Wmilog.WriteToLog("Excute CreateRemoteDirectory:" + outParams.ToString());
}
catch (Exception ex)
{
Wmilog.WriteToLog("in CreateRemoteDirectory Exception:" + ex.Message);
return -1;
}
Wmilog.WriteToLog("建远程目录成功!");
return 0;
}
/// <summary>
/// 在远程目标机器上创建一个注册表主键
/// </summary>
/// <param name="connectionScope">ManagementScope</param>
/// <param name="machineName">目标机器IP</param>
/// <param name="BaseKey">注册表分支名</param>
/// <param name="key">主键名称</param>
/// <returns>创建成功则返回0</returns>
public static int CreateRemoteKey(ManagementScope connectionScope,
string machineName,
RootKey BaseKey,
string key)
{
try
{
ObjectGetOptions objectGetOptions = new ObjectGetOptions(null, System.TimeSpan.MaxValue, true);
connectionScope.Path = new ManagementPath(@"\\" + machineName + @"\root\DEFAULT:StdRegProv");
connectionScope.Connect();
ManagementClass registryTask = new ManagementClass(connectionScope,
new ManagementPath(@"DEFAULT:StdRegProv"), objectGetOptions);
ManagementBaseObject methodParams = registryTask.GetMethodParameters("CreateKey");
methodParams["hDefKey"] = BaseKey;
methodParams["sSubKeyName"] = key;
ManagementBaseObject exitCode = registryTask.InvokeMethod("CreateKey",
methodParams, null);
Wmilog.WriteToLog("in CreateRemoteKey:" + exitCode.ToString());
}
catch (ManagementException e)
{
Wmilog.WriteToLog("in CreateRemoteKey(ManagementException):" + e.Message);
return -1;
}
Wmilog.WriteToLog("注册表主键创建成功!");
return 0;
}
/// <summary>
/// 在远程目标机器上创建一个注册表键值
/// </summary>
/// <param name="connectionScope">ManagementScope</param>
/// <param name="machineName">目标机器IP</param>
/// <param name="BaseKey">注册表分支名</param>
/// <param name="key">主键名称</param>
/// <param name="valueName">键值名称</param>
/// <param name="value">键值</param>
/// <returns>创建成功则返回0</returns>
public static int CreateRemoteValue(ManagementScope connectionScope,
string machineName,
RootKey BaseKey,
string key,
string valueName,
string value)
{
try
{
ObjectGetOptions objectGetOptions = new ObjectGetOptions(null, System.TimeSpan.MaxValue, true);
connectionScope.Path = new ManagementPath(@"\\" + machineName + @"\root\DEFAULT:StdRegProv");
connectionScope.Connect();
ManagementClass registryTask = new ManagementClass(connectionScope,
new ManagementPath(@"DEFAULT:StdRegProv"), objectGetOptions);
ManagementBaseObject methodParams = registryTask.GetMethodParameters("SetStringValue");
methodParams["hDefKey"] = BaseKey;
methodParams["sSubKeyName"] = key;
methodParams["sValue"] = value;
methodParams["sValueName"] = valueName;
ManagementBaseObject exitCode = registryTask.InvokeMethod("SetStringValue",
methodParams, null);
Wmilog.WriteToLog("in CreateRemoteValue:" + exitCode.ToString());
}
catch (ManagementException e)
{
Wmilog.WriteToLog("in CreateRemoteValue(ManagementException):" + e.Message);
return -1;
}
Wmilog.WriteToLog("注册表键值写入成功!");
return 0;
}
/// <summary>
/// 执行远程文件/目录推送
/// </summary>
/// <param name="Server">目标地址</param>
///