如何登录到一个管理帐户从现有的多个管理帐户在windows,基于凭证使用c#.net代码

本文关键字:管理 于凭证 windows 代码 net 凭证 登录 何登录 一个 | 更新日期: 2023-09-27 18:04:48

我的问题是我在系统的admin下创建了三个帐户(这三个帐户都是在系统admin下创建的)。这些都是 Account1: admin1Account2: TestUser1Account3: TestUser2 。现在,我使用c#代码从每个帐户登录该帐户凭据并运行我的c#应用程序。问题是当我从每个帐户登录时,应用程序支持所有三个帐户凭据。例如,现在我从TestUser1登录,它是工作良好的TestUser1 credential,但它也支持admin1,TestUser2 credential。我的问题是我想登录基于该帐户凭据,而不是从其他两个。我正在开发c#windows应用程序。这个应用程序为Shift系统创建了多个用户登录和从他们自己的帐户工作。你好,有人帮帮我吗?关于这个问题。

我的登录码是

公共部分类FrmLogIn: Form{

[DllImport("ADVAPI32.dll", EntryPoint = "LogonUserW", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

public FrmLogIn()
{
  InitializeComponent();
}
private void FrmLogIn_Load(object sender, EventArgs e)
{
  foreach (Control ctl in pnlLogin.Controls)
  {
    if (ctl.TabIndex == 1)
      ctl.Focus();
  }
}
private void btnOK_Click(object sender,System. EventArgs e)
{
  toolStripStatusLabel1.Text = this.showstatus(" Login plz wait Verify the credentails...");
  System.Threading.Thread.Sleep(4000);
  string domainName = GetDomainName(txtUserName.Text); // Extract domain name form provide DomainUsername e.g Domainname'Username
  string userName = GetUsername(txtUserName.Text); // Extract user name from provided DomainUsername e.g Domainname'Username
  IntPtr token = IntPtr.Zero;

  bool result = LogonUser(userName, domainName, txtPassword.Text, 2, 0, ref token);
  if (result)
  {
    MessageBox.Show("LOGIN SUCCESSFULLY ");
    form2 obj = new form2();                   
    obj.Show();        
    this.Hide();
  }
    public static string GetDomainName(string usernameDomain)
{
  if (string.IsNullOrEmpty(usernameDomain))
  {
    throw (new ArgumentException("Argument can't be null.", "usernameDomain"));
  }
  if (usernameDomain.Contains("''"))
  {
    int index = usernameDomain.IndexOf("''");
    return usernameDomain.Substring(0, index);
  }
  else if (usernameDomain.Contains("@"))
  {
    int index = usernameDomain.IndexOf("@");
    return usernameDomain.Substring(index + 1);
  }
  else
  {
    return "";
  }
}
public static string GetUsername(string usernameDomain)
{
  if (string.IsNullOrEmpty(usernameDomain))
  {
    throw (new ArgumentException("Argument can't be null.", "usernameDomain"));
  }
  if (usernameDomain.Contains("''"))
  {
    int index = usernameDomain.IndexOf("''");
    return usernameDomain.Substring(index + 1);
  }
  else if (usernameDomain.Contains("@"))
  {
    int index = usernameDomain.IndexOf("@");
    return usernameDomain.Substring(0, index);
  }
  else
  {
    return usernameDomain;
  }
}

如何登录到一个管理帐户从现有的多个管理帐户在windows,基于凭证使用c#.net代码

使用这里找到的Impersonator类。

它是优秀的。他已经用一种干净的方式为你包装了LogonUser。

通常你这样写代码:

using (Impersonator impersonator = new Impersonator("administrator", "password"))
{
    //Put your code under another user here.
}