none
取得本機登入者帳號的問題~ RRS feed

  • 問題

  • 請問~

     

    我的程式是 Windows 服務 使用 LocalSystem 權限~

     

    請問要如何取得 本機登入者的帳號名稱~~

     

    繁請知道的大大解答一下~~謝謝~~

    2007年8月28日 上午 10:59

所有回覆

  • 可以透過呼叫api的方式來做:

    Code Snippet

    public partial class Form1 : Form

        {

        [DllImport("Advapi32.dll", EntryPoint = "GetUserName",ExactSpelling = false, SetLastError = true)]

        static extern bool GetUserName(

        [MarshalAs(UnmanagedType.LPArray)] byte[] lpBuffer,

        [MarshalAs(UnmanagedType.LPArray)] Int32[] nSize);

     

            public Form1()

            {

                InitializeComponent();

            }

     

            private void Form1_Load(object sender, EventArgs e)

            {

                byte[] str = new byte[256];

                Int32[] len = new Int32[1];

                len[0] = 256;

                GetUserName(str, len);

                MessageBox.Show(System.Text.Encoding.ASCII.GetString(str));

            }

        }

     

     

    參考來源:http://www.codeproject.com/csharp/getusername.asp
    2007年8月28日 下午 02:15
    版主
  • 非常謝謝LOLOTA 大大的回答 ~~

     

    但還是殘念~

     

    取得的名稱還是 SYSTEM 不是本機使用者的名稱~

     

    但還是非常謝謝您的回答~~

     

    不知道還有什麼取法嗎??

     

    繁請知道的大大解答一下~~謝謝~~

    2007年8月28日 下午 07:34
  • 先跟您確認一下,您要抓的是像Administrator這樣的「目前」登入者帳號?

    還是電腦中的使用者清單?

     

    2007年8月29日 上午 12:48
    版主
  • 取得目前使用者的帳號,辦法倒是很多,例如: 登入者為 Administraotr

     

    Code Snippet

    MessageBox.Show(Environment.UserName);  

    // Output: Administraotr

     

    MessageBox.Show(SystemInformation.UserName);   

    // Output: Administraotr

     

    MessageBox.Show(WindowsIdentity.GetCurrent().Name); 

    //  Output: ComputerName\Administraotr

     

     

    2007年8月29日 上午 01:07
  • 您好~

     

    沒錯就是要 目前 OS 登入者的帳號~

    2007年8月29日 上午 03:32
  • 用chhuang的比較快,我提供的方法是呼叫API來抓取,但是應該也是能抓到 ,不知道為什麼您說不能抓到Orz。

    2007年8月29日 上午 04:18
    版主
  • LOLOTA~

    這個問題我在別的論壇也有看到.  應該都是同一個人發的吧.

    我猜他的情況有點像是程式寫成Windows服務,所以用LocalSystem的帳號去執行.

    當我們登入時,是用別的帳號,而那個程式只會抓到"執行者"LocalSystem,抓不到登入者的名稱.

     

    目前我是沒想到答案,看看大家有什麼好想法~
    2007年8月29日 上午 05:21
  • 非常謝謝 chhuang 大大您的回答~

    不過很可惜的 完敗~

    取得的都是SYSTEM~

     

    這個時候我想這都是取 處理程序的使用者的名稱~

     

    不是真正的取得Windows 的登入者帳號~

     

    這個windows服務 是使用 LocalSystem權限 所以取到的都是 SYSTEM~

     

    我注意到了 "處理程序" 這四個字~

     

    我就想到了我把 目前的 處理程序  User權限一定會開啟的程序 像 explorer

     

    拿出來 取得它的使用者名稱就好了~

     

    去小查了一下msdn~

     

    Process.StartInfo.UserName

     

    找到了這個屬性~

     

    小試用了一下~發現出現都是 空值  整個人就Orz~

     

    不過還好~最後在對岸的網站上找到了解答~是使用WMI 來取得 目前處理程序的使用者名稱~

    http://blog.csdn.net/gengchengxiang/archive/2007/08/17/1748424.aspx

     

     

    不過覺得這個方式取得登入者帳號的風險還是很大~

     

     

    2007年8月29日 上午 08:09