Домой Radmin Установка Radmin через WMI: Справочник по C#

Установка Radmin через WMI: Справочник по C#

426
0


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Management;
using System.Threading;
using RADInstallWMI;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Security.Principal;
namespace RADInstallWMI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

static BackgroundWorker bw;

#region Enum
public enum StartMode
{
Boot = 0,
System = 1,
Automatic = 2,
Manual = 3,
Disabled = 4
}

public enum ServiceState
{
Running,
Stopped,
Paused,
StartPending,
StopPending,
PausePending,
ContinuePending
}
public enum ServiceType : uint
{
KernelDriver = 0x1,
FileSystemDriver = 0x2,
Adapter = 0x4,
RecognizerDriver = 0x8,
OwnProcess = 0x10,
ShareProcess = 0x20,
Interactive = 0x100
}
#endregion

#region Invoke
public void Listbox(string text)
{
try
{
if (InvokeRequired)
BeginInvoke(new MethodInvoker(delegate
{
listBoxControl1.Items.Add(text);
}));
else
{
listBoxControl1.Items.Add(text);
}
}
catch (Exception) { }
}
#endregion

private void simpleButton1_Click(object sender, EventArgs e)
{
bw = new BackgroundWorker();
bw.WorkerReportsProgress = true; /*если установить false, то функция отчета прогресса будит недоступна*/
bw.WorkerSupportsCancellation = true; /* если установить false, то остановить процесс будит невозможно, до окончания выполнения*/
bw.DoWork += bw_DoWork; //обработчик событий
//bw.ProgressChanged += bw_ProgressChanged; //обработчик изменения прогресса
bw.RunWorkerCompleted += bw_RunWorkerCompleted; //обработчик окончания работы

bw.RunWorkerAsync(null); //начало выполнения процесса в новом потоке
simpleButton1.Enabled = false;
listBoxControl1.Items.Clear();
//if (bw.IsBusy)
//{
//    bw.CancelAsync(); //остановка работы
//    MessageBox.Show("Установка была прервана");
//}
}
public ManagementBaseObject outParams;
public ManagementBaseObject inparams;
public SelectQuery query;
public ManagementObjectSearcher searcher;
public bool dostup,dostup1;
public string SystemDirectory, Directory;
public ManagementObjectCollection queryCollection;
/*в bw_DoWork задаются функции, задачи которые нужно выполнить*/
// obtains user token
[DllImport("advapi32.dll", SetLastError = true)]
public static extern int LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

public void CopyFilesToSharedLocation1()
{
IntPtr admin_token = default(IntPtr);
WindowsIdentity wid_admin = null;
WindowsImpersonationContext wic = null;
try
{
//MessageBox.Show("Copying file...");
// username,fully qualified computer name,pwd,9,0,admin_token
if (LogonUser(textEdit2.Text, "oao", textEdit3.Text, 9, 0, ref admin_token) != 0)
{
wid_admin = new WindowsIdentity(admin_token);
wic = wid_admin.Impersonate();
MessageBox.Show(SystemDirectory);
string path = @"Путь к папке с файлами Radmin";//эти файлы вы можете скачать с офф сайта Radmin
System.IO.File.Copy(path + @"ServiceRADoeminfo.ini", SystemDirectory + "oeminfo.ini", true);
System.IO.File.Copy(path + @"ServiceRADr_server.exe", SystemDirectory + "r_server.exe", true);
System.IO.File.Copy(path + @"ServiceRADrad.reg", SystemDirectory + "rad.reg", true);
System.IO.File.Copy(path + @"ServiceRADraddrv.dll", SystemDirectory + "raddrv.dll", true);

dostup1 = true;
//MessageBox.Show("Copy succeeded");
}
else
{
dostup1 = false;
//MessageBox.Show("Copy Failed");
}
}
catch (System.Exception se)
{
int ret = Marshal.GetLastWin32Error();
dostup1 = false;
MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString());
MessageBox.Show(se.Message);
}
finally
{
if (wic != null)
{
wic.Undo();
}
}
}

public void bw_DoWork(object sender, DoWorkEventArgs e)
{

if (Ping())
{
Listbox("Компьютер доступен.");
try
{
#region Установка службы
ManagementScope ms;
ConnectionOptions co = new ConnectionOptions();
co.Username = "";//логин и пароль для подключения к удаленному ПК
co.Password = "";
co.EnablePrivileges = true;
co.Impersonation = ImpersonationLevel.Impersonate;
try
{
ms = new ManagementScope(string.Format(@"\{0}rootCIMV2", textEdit1.Text), co);
ms.Connect();
}
catch (Exception)
{
e.Result = "0";
return;
}

ManagementPath path = new ManagementPath("Win32_Process");
ManagementClass manageClass = new ManagementClass(ms, path, new ObjectGetOptions());

#region Получение системной директории
query = new SelectQuery("select * from Win32_OperatingSystem");
searcher = new ManagementObjectSearcher(ms, query);
queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
SystemDirectory = m.GetPropertyValue("SystemDirectory").ToString().Trim();
Directory = m.GetPropertyValue("SystemDirectory").ToString().Trim();
SystemDirectory = SystemDirectory.Replace(":", "$");
SystemDirectory = String.Format(@"\{0}{1}", textEdit1.Text, SystemDirectory);
}
#endregion

#region Проверка : установлена ли служба
query = new SelectQuery("select * from Win32_Service");
searcher = new ManagementObjectSearcher(ms, query);
queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
if (m.GetPropertyValue("Name").ToString().Trim() == "r_server")
{
Listbox("Служба уже установлена!");
dostup = false;
break;
}
else
{
dostup = true;
}
}
#endregion

#region Установка службы
if (dostup == true)
{
Listbox("Начало установки...");

#region Копирование файлов
CopyFilesToSharedLocation1();
if ( dostup1 == false)
{
Listbox("Ошибка копирования файлов установки.");
return;
}
else
{
Listbox("Файлы установки успешно скопированы!");
}

#endregion

inparams = manageClass.GetMethodParameters("Create");
inparams["CommandLine"] = @"regedit.exe /s " + Directory + @"rad.reg ";
inparams["CurrentDirectory"] = Directory;

outParams = manageClass.InvokeMethod("Create", inparams, null);

if (outParams["ReturnValue"].ToString().Trim() == "0")
{
Listbox("Регистрация службы в реестре: Успешно.");

inparams = manageClass.GetMethodParameters("Create");
inparams["CommandLine"] = Directory + @"r_server.exe /install /silence";
inparams["CurrentDirectory"] = Directory;

outParams = manageClass.InvokeMethod("Create", inparams, null);


if (outParams["ReturnValue"].ToString().Trim() == "0")
{
Listbox("PID службы: " + outParams["ProcessID"]);

inparams = manageClass.GetMethodParameters("Create");
inparams["CommandLine"] = Directory + @"r_server.exe /start";
inparams["CurrentDirectory"] = Directory;

outParams = manageClass.InvokeMethod("Create", inparams, null);

if (outParams["ReturnValue"].ToString().Trim() == "0")
{
Listbox("Служба запущена");
Listbox("Установка выполнена успешно!");

return;
}
else
{
Listbox("Невозможно запустить службу");
return;
}
}
else
{
Listbox("Служба не установлена.");
return;
}
}
else
{
Listbox("Регистрация службы в реестре: Невыполнено.");
Listbox("Служба не установлена.");
return;
}
}
else
{
return;
}
#endregion

}
catch (Exception)
{
e.Result = "0";
}
#endregion

}
else
{
MessageBox.Show("Компьютер в настоящее время не доступен");
return;
}
}

/*логика обработки завершения выполнения*/
public void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//switch (e.Result.ToString())
//{
//    case "0":
//        {
//            Listbox("Компьютер недоступен");
//        }
//        break;
//    case "1":
//        {
//            Listbox("Служба уже установлена");
//        }
//        break;
//    default:
//        break;
//}
simpleButton1.Enabled = true;
}
public bool Ping()
{
SelectQuery query = new SelectQuery("Win32_PingStatus", string.Format("Address='{0}'", textEdit1.Text));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);

foreach (ManagementObject result in searcher.Get())
{
return (result["StatusCode"] != null && (0 == (UInt32)result["StatusCode"]));
}
return false;
}
}
}

Установка Radmin через WMI: Справочник по C#

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Прослушивание USB порта на вставку и извлечение USB устройств и вывода информации о них с помощью WMI: Справочник по C#

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь