Programming/C#2011. 11. 8. 14:43
C#으로 Username을 구하는 방법은 다양하게 존재합니다.. 그런데 서비스 안에서 Username 을 구하려고 할 경우에는 보통 방법으로는 구할 수가 없습니다. 그래서 찾은 방법을 소개 합니다.

우선 WMI에 대해서 알아야 합니다.

http://technet.microsoft.com/ko-kr/library/cc736575(WS.10).aspx

WMI에는 개체 정의 데이터베이스인 개체 저장소가 포함되어 있으며 저장소에서 개체를 수집하고 조작하며 WMI 공급자로부터 정보를 수집하는 WMI 개체 관리자가 포함되어 있습니다. 라고 되어 있습니다.

아래 소스처럼 쿼리문을 날려서 프로세스의 소유자에 대한 정보를 가져오면 Username이라고 볼 수 있습니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Management; //추가

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string ProcessName = "explorer.exe";
            string ProcessOwner = "";
            ObjectQuery x = new ObjectQuery("Select * From Win32_Process where Name='" + ProcessName + "'");
            ManagementObjectSearcher mos = new ManagementObjectSearcher(x);
            foreach (ManagementObject mo in mos.Get())
            {
                string[] s = new string[2];
                mo.InvokeMethod("GetOwner", (object[])s);
                ProcessOwner = s[0].ToString();
                break;
            }
        }
    }
}
Posted by Mocker