Autor Beitrag
opelig
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 10.08.11 14:32 
Hallöchen,

Ich schreibe gerade an einem Programm in c#. In diesem sollen unter anderem die vorhandenen Windows User in einer Listbox stehen.

Bisher habe ich
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        private void usr_listbox()
        {
            //hier werden die Aktuell vorhandenen Benutzer des Systems ausgelesen
            //und angezeigt als Auswahl
            DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
            DirectoryEntry admGroup = localMachine.Children.Find("ean""user");
            object members = admGroup.Invoke("user");
            foreach (object groupMember in (System.Collections.IEnumerable)members)
            {
                DirectoryEntry member = new DirectoryEntry(groupMember);
                usr_lb.Items.Add(member.Name);
                usr_lb2.Items.Add(member.Name);
            }
        }

das funktioniert nur leider nicht. Bei Zeile 7 bekomm ich nen error "Unbekannter Name. (Ausnahme von HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))"

ich hab jetzt schon ne Ecke gegoogled aber Leider nichts passendes gefunden.

Danke schonmal für eure Mühe und Hilfe

Moderiert von user profile iconTh69: C#-Tags hinzugefügt und einige Rechtschreibfehler korrigiert
Moderiert von user profile iconTh69: Und noch ein Hinweis: dies ist der Nachfolgethread zu Aktuell Vorhandene Systembenutzer auslesen
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 10.08.11 22:10 
Hallo und :welcome:
Naja, laut dem Code fragst Du einen User ab, der "ean" heißt. Und nicht eine Gruppe. Und von diesem User fragst Du dann nochmal die User ab. Fällt Dir dabei was auf?
user profile iconopelig hat folgendes geschrieben Zum zitierten Posting springen:
ich hab jetzt schon ne Ecke gegoogled aber Leider nichts passendes gefunden.

Naja, wahrscheinlich hast Du einfach nicht die richtigen Schlagworte eingegeben.
Wer mit Google richtig sucht, findet auch meistens die richtigen Sachen.
Z.B. diese Seite: stackoverflow.com/qu...ers-of-a-winnt-group
Also in Deinem Fall müsste es so aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
using (DirectoryEntry groupEntry = new DirectoryEntry(string.Format("WinNT://{0}/ean, group", Environment.MachineName)))
{
  foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
  {
    using (DirectoryEntry memberEntry = new DirectoryEntry(member))
    {
      usr_lb.Items.Add(memberEntry.Name);
      usr_lb2.Items.Add(memberEntry.Name);   
    }
  }
}

LG,
opelig Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 11.08.11 09:48 
hoi hoi,

Danke schonmal für die Hilfe, doch leider Funktioniert das ganze so nicht!

Nochmal zur Erinnerung: Auslesen der Lokalen Benutzer. also komplett ohne AD oder LDAP oder ähnlichem. Desweiteren
sollen alle User also inklusive dem Admin und allem aufgelistet werden, also nicht nur bestimmte Gruppen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 11.08.11 10:29 
Hallo,

mittels der Suche nach "C# list of local window users" habe ich folgende Lösung gefunden:
über WMI: www.andreas-kraus.ne...t-all-windows-users/ bzw. chakkaradeep.wordpre...-using-wminet-and-c/

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
using System.Management;

SelectQuery query = new SelectQuery("Win32_UserAccount");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject envVar in searcher.Get())
{
    Console.WriteLine("Username : {0}", envVar["Name"]);
}

P.S. Und zusätzlich die Assembly "System.Management.dll" als Verweis zu deinem Projekt hinzufügen.
opelig Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 11.08.11 12:44 
ich liste kurz mal meinen bisherigen Code


das window in dem sich alles abspielt:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
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.DirectoryServices;
using System.Collections;
using System.Management;


namespace ParentController
{
    public partial class Parent_Controll : Form
    {
        public Parent_Controll()
        {
            InitializeComponent();
            pr_sav_btn_E();
            usr_listbox();
            usr_list usr_listb = new usr_list();
            getactprox gaP = new getactprox();
            

        }

        private void pr_sav_btn_E()
        {
            if (pr_bn_tb.Text == "" || pr_pn_tb.Text == "" || pr_pp_tb.Text == "" || pr_pw_tb.Text == "")
                pr_sav_btn.Enabled = false;
            else
                pr_sav_btn.Enabled = true;
        }

        private void pr_sav_btn_Click(object sender, EventArgs e)
        {
            //Button zum Speichern der angegebenen Werte

        }

        private void pr_res_btn_Click(object sender, EventArgs e)
        {
            //Button Resetet alle Eingaben auf "leer" 
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Toolstrip Exit Click schliesst das Programm und öffnet das Login!
            this.Close();
            Welcome wc = new Welcome();
            wc.Show();
        }
        private void zs_hinweis_pnl()
        {
            //Hinweise die im Panel der Zugriffssteuerung stehen!

            //ggr. Abgleich mit online RSS Dienst!
        }
        private void usr_listbox()
        {
            usr_lb.Items.Add(Name);
                //DirectoryEntry directoryEntry = new DirectoryEntry("WinNT://" + Environment.MachineName);
            //string userNames = "";
            //foreach (DirectoryEntry child in directoryEntry.Children)
            //{
            //    if (child.SchemaClassName == "User")
            //    {
            //        userNames += child.Name + Environment.NewLine;
            //    }
            //    usr_lb.SelectedItems.Add(userNames);
            //    usr_lb2.Items.Add(userNames);
            //    //usr_cb.Items.Add(userNames);
            //}      
        }

        //MessageBox.Show(userNames);
        //hier werden die Aktuell vorhandenen Benutzer des Systems ausgelesen
        //und angezeigt als Auswahl
        //DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName);
        //DirectoryEntry admGroup = localMachine.Children.Find("", "user");
        //object members = admGroup.Invoke("user", null);
        //foreach (object groupMember in (System.Collections.IEnumerable)members)
        //{
        //    DirectoryEntry member = new DirectoryEntry(groupMember);  
        //}



        //private void get_Proxy()
        //{
        //    if (pr_url_tb.Text == null)
        //        get_Proxy = new getactprox(getactprox.IP());

        //    //hier werden die Aktuellen proxysettings abgefragt
        //}

    }
}


hier füllt er zwar schon die "usr_lb" aber Leider nur mit dem Wort "Name" jedoch ist das ne Listbox und da sollten Alle user die es Lokal gibt erscheinen.

die klasse zur user abfrage:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.IO;


namespace ParentController
{
    class usr_list
    {
        public static void GetUsers()
{
            SelectQuery sQuery = new SelectQuery("Win32_UserAccount");

            try
            {
                ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(sQuery);
                
                Console.WriteLine("User Accounts");
                Console.WriteLine("");

                foreach (ManagementObject mObject in mSearcher.Get())
                {
                     
                    Console.WriteLine(mObject["Name"]);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            
            //Console.ReadKey();
 }
    }
}


entweder steh ich im moment total auf der Leitung und seh den Fahler nicht oder ... naja wie dem auch sei. Bin für jeden Tip dankbar
opelig Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 12.08.11 12:08 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
        private void usr_listbox()
        {
            SelectQuery query = new SelectQuery("Win32_UserAccount");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
            foreach (ManagementObject envVar in searcher.Get())
            {
                usr_lb.Items.Add(envVar["Name"]);
                usr_lb2.Items.Add(envVar["Name"]);
                //Console.WriteLine("Username : {0}", envVar["Name"]);
            }
        }


Die Lösung kann so Simpel sein :)))