회사 임직원들
불법 s/w 때문에 골치입니다.
특히 알약,알집 이 멍멍이들.
소프트웨어 관리/감사 프로그램 견적 받아서 진행하다가,,막판에 가격이 틀어져
저한테 개발 지시가 내려졌습니다.
사용자:agent 깔림, updater가 agent 버전체크 후 agent 실행.
관리자:agent에서 수집된 정보와 등록된 s/w갯수 비교
사용자에게 uninstall 명령 및 메시지 전송
---------------------------------
처음에 agent의 exe파일 모조리 수집해서 소프트웨어협회 db랑 비교 하다가
속도 때문에 빡쳐서 ,,그냥 제어판 registry 정보로 퉁침.
하드웨어 정보는....가끔 노트븍/데스크탑 메모리 빼가는 직원들이 있어서.
private DataTable GetInstalledApps()
{
DataTable dt = new DataTable();
DataRow row = null;
dt.Columns.Add(new DataColumn("SEQ", typeof(string)));
dt.Columns.Add(new DataColumn("PGM_NAME", typeof(string)));
dt.Columns.Add(new DataColumn("VENDOR", typeof(string)));
dt.Columns.Add(new DataColumn("VERSION", typeof(string)));
dt.Columns.Add(new DataColumn("EMAIL", typeof(string)));
dt.Columns.Add(new DataColumn("NAME", typeof(string)));
dt.Columns.Add(new DataColumn("UNINSTALL", typeof(string)));
int i = 0;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WONJIN\EMAIL");
string email = regKey.GetValue("EMAIL").ToString();
string name = regKey.GetValue("NAME").ToString();
string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
foreach (string skName in rk.GetSubKeyNames())
{
using (RegistryKey sk = rk.OpenSubKey(skName))
{
try
{
if (sk.GetValue("DisplayName").ToString() == "" || sk.GetValue("UninstallString").ToString() == "")
continue;
i = i + 1;
row = dt.NewRow();
row["SEQ"] = i.ToString();
row["PGM_NAME"] = sk.GetValue("DisplayName");
if (sk.GetValue("Publisher").ToString().Trim() == "")
row["VENDOR"] = "-";
else
row["VENDOR"] = sk.GetValue("Publisher");
if (sk.GetValue("DisplayVersion").ToString().Trim() == "")
row["VERSION"] = "1";
else
row["VERSION"] = sk.GetValue("DisplayVersion");
row["EMAIL"] = email;
row["NAME"] = name;
row["UNINSTALL"] = sk.GetValue("UninstallString");
dt.Rows.Add(row);
}
catch (Exception ex)
{ }
}
}
}
return dt;
}
private DataTable GetInstalledHW()
{
DataTable dt = new DataTable();
DataRow row = null;
dt.Columns.Add(new DataColumn("SEQ", typeof(string)));
dt.Columns.Add(new DataColumn("EMAIL", typeof(string)));
dt.Columns.Add(new DataColumn("NAME", typeof(string)));
dt.Columns.Add(new DataColumn("CPU", typeof(string)));
dt.Columns.Add(new DataColumn("RAM", typeof(string)));
dt.Columns.Add(new DataColumn("MB", typeof(string)));
dt.Columns.Add(new DataColumn("VGA", typeof(string)));
dt.Columns.Add(new DataColumn("HDD", typeof(string)));
dt.Columns.Add(new DataColumn("HDD_SIZE", typeof(string)));
dt.Columns.Add(new DataColumn("SYSTEMNAME", typeof(string)));
int i = 0;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WONJIN\EMAIL");
string email = regKey.GetValue("EMAIL").ToString();
string name = regKey.GetValue("NAME").ToString();
row = dt.NewRow();
// cpu
row["EMAIL"] = email;
row["NAME"] = name;
try
{
ManagementObjectSearcher cpu = new ManagementObjectSearcher("select * from Win32_Processor");
foreach (ManagementObject mo in cpu.Get())
{
row["CPU"] = mo["Name"].ToString();
row["SYSTEMNAME"] = mo["SystemName"].ToString();
}
//RAM
double capa = 0;
ManagementObjectSearcher ram = new ManagementObjectSearcher("select * from Win32_PhysicalMemory");
foreach (ManagementObject mo in ram.Get())
{
capa = capa + double.Parse(mo["Capacity"].ToString());
}
capa = capa / 1024 / 1024; //megabyte
row["RAM"] = capa;
//MB
ManagementObjectSearcher mb = new ManagementObjectSearcher("select * from Win32_BaseBoard");
foreach (ManagementObject mo in mb.Get())
{
row["MB"] = mo["Product"].ToString();
}
//vga
ManagementObjectSearcher vga = new ManagementObjectSearcher("select * from Win32_DisplayConfiguration");
foreach (ManagementObject mo in vga.Get())
{
row["VGA"] = mo["Description"].ToString();
}
//HDD
ManagementObjectSearcher hdd = new ManagementObjectSearcher("select * from Win32_DiskDrive");
foreach (ManagementObject mo in hdd.Get())
{
row["HDD"] = mo["Model"].ToString();
row["HDD_SIZE"] = mo["size"].ToString();
}
dt.Rows.Add(row);
return dt;
}
catch(Exception e)
{
dt.Rows.Add(row);
return dt;
}
}
agent 배포는 AD 및 v3 관제툴로 하다가,,,pc유지보수업체 시켰습니다.
갯수->개수 (개수 (個數)[명사] : 한 개씩 낱으로 셀 수 있는 물건의 수효.) [리듬 맞춤법 봇♬]
메모리 훔쳐가는 인간이 있다니.. 그게 더 깜놀인걸... 헐.