亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# 修改windows中賬戶的用戶名和密碼

 更新時間:2020年11月24日 09:22:43   作者:沙奇碼丶  
這篇文章主要介紹了c# 改變windows中賬戶的用戶名和密碼,幫助大家更好的理解和學習C#,感興趣的朋友可以了解下

在 C# 中,我們可以使用 WMI 類中的 Win32_Service 或者 Win32 API 中的函數 ChangeServiceConfig 來修改本地或遠程計算機 Windows 服務登錄身份 (賬戶) 的用戶名和密碼。

1、使用 Win32 API 修改服務登錄身份信息:

使用 Win32 API 中的函數 ChangeServiceConfig 更改的是服務控制管理器數據庫中指定服務的配置信息。

private const int SC_MANAGER_ALL_ACCESS = 0x000F003F;
private const uint SERVICE_NO_CHANGE = 0xffffffff; //這個值可以在 winsvc.h 中找到
private const uint SERVICE_QUERY_CONFIG = 0x00000001;
private const uint SERVICE_CHANGE_CONFIG = 0x00000002;
 
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern Boolean ChangeServiceConfig(IntPtr hService, UInt32 nServiceType, 
  UInt32 nStartType,UInt32 nErrorControl,String lpBinaryPathName,String lpLoadOrderGroup,
  IntPtr lpdwTagId, [In] char[] lpDependencies, String lpServiceStartName, 
  String lpPassword, String lpDisplayName);
 
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern IntPtr OpenService(IntPtr hSCManager, string lpServiceName, uint dwDesiredAccess);
 
[DllImport("advapi32.dll", EntryPoint = "OpenSCManagerW", ExactSpelling = true, 
  CharSet = CharSet.Unicode, SetLastError = true)]
public static extern IntPtr OpenSCManager(string machineName, string databaseName, uint dwAccess);
 
public static bool ChangeServiceAccountInfo(string serviceName, string username,string password)
{
  try
  {
    IntPtr scm_Handle = OpenSCManager(null, null, SC_MANAGER_ALL_ACCESS);
    if (scm_Handle == IntPtr.Zero)
     throw new System.Runtime.InteropServices.ExternalException("打開服務管理器錯誤");
 
    IntPtr service_Handle = OpenService(scm_Handle, serviceName,SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG);
    if (service_Handle == IntPtr.Zero)
     throw new System.Runtime.InteropServices.ExternalException("打開服務錯誤");
    //修改服務的賬戶用戶名和密碼
    if (!ChangeServiceConfig(service_Handle, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, 
       SERVICE_NO_CHANGE, null, null, IntPtr.Zero, null, username, password, null))
    {
      int nError = Marshal.GetLastWin32Error();
      Win32Exception win32Exception = new Win32Exception(nError);
      throw new System.Runtime.InteropServices.ExternalException("無法修改服務登錄身份的用戶名和密碼:" + win32Exception.Message);
    }
    Console.WriteLine("服務登錄身份信息修改成功!");
    return true;
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.ToString());
    return false;
  }
}

2、使用 C# 中 WMI 修改服務登錄身份信息:

使用 WMI 服務,我們需要添加 System.Management 的引用。

注意:如果您的遠程計算機連接的是 Active Directory 域,那么使用完全限定的用戶名(例如 TestDomainMorgan)而不是簡單的用戶名(Morgan)。

using System.Management;

public static void ChangeServiceAccountInfobyWMI(string serviceName, string username, string password)
{
  string mgmntPath = string.Format("Win32_Service.Name='{0}'", serviceName);
  using (ManagementObject service = new ManagementObject(new ManagementPath(mgmntPath)))
  {
    object[] accountParams = new object[11];
    accountParams[6] = username;
    accountParams[7] = password;
    uint returnCode = (uint)service.InvokeMethod("Change", accountParams);
    if (returnCode == 0)
    {
       Console.WriteLine("服務登錄身份信息修改成功!");
    }
    else
    {
       Console.WriteLine("服務登錄身份信息修改失敗");
       Console.WriteLine("錯誤代碼:" + returnCode);
       // 此微軟官方支持鏈接,可以查看相應的返回代碼的消息:
       // https://msdn.microsoft.com/en-us/library/aa393660(v=vs.85).aspx
    }
  }
}

3、使用 C#中的 WMI 修改遠程計算機服務的登錄身份信息:

使用 WMI 服務,我們需要添加 System.Management 的引用,并且在修改遠程計算機中的服務信息時,請使用管理員憑據。

注意:如果您的遠程計算機連接的是 Active Directory 域,那么使用完全限定的用戶名(例如 TestDomainMorgan)而不是簡單的用戶名(Morgan)。

using System.Management;
static void ChangeRemoteServiceAccountInfo(string remoteComputer, string serviceName, string username, string password)
{
  try
  {
    ConnectionOptions connectionOptions = new ConnectionOptions();
    // 如需要,請使用證書
    //connectionOptions.Username = "Administrator";
    //connectionOptions.Password = "AdminPassword";
    //connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
    ManagementScope scope = new ManagementScope("\" + remoteComputer + "rootCIMV2", connectionOptions);
    scope.Connect();
    string mgmntPath = string.Format("Win32_Service.Name='{0}'", serviceName);
    using (ManagementObject service = new ManagementObject(scope, new ManagementPath(mgmntPath),new ObjectGetOptions()))
    {
      object[] accountParams = new object[11];
      accountParams[6] = username;
      accountParams[7] = password;
      uint returnCode = (uint)service.InvokeMethod("Change", accountParams);
      if (returnCode == 0)
      {
        Console.WriteLine("服務登錄身份信息修改成功!");
      }
      else
      {
        Console.WriteLine("服務登錄身份信息修改失敗");
        Console.WriteLine("錯誤代碼:" + returnCode);
        // 此微軟官方支持鏈接,可以查看相應的返回代碼信息:
        // https://msdn.microsoft.com/en-us/library/aa393660(v=vs.85).aspx
      }
    }
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.ToString());
  }
}

以上就是c# 改變windows中賬戶的用戶名和密碼的詳細內容,更多關于c# 更改用戶名和密碼的資料請關注腳本之家其它相關文章!

相關文章

  • C# WinForm捕獲全局變量異常 SamWang解決方法

    C# WinForm捕獲全局變量異常 SamWang解決方法

    本文將介紹C# WinForm捕獲全局變量異常 SamWang解決方法,需要的朋友可以參考
    2012-11-11
  • 在Framework 4.0中:找出新增的方法與新增的類(一)

    在Framework 4.0中:找出新增的方法與新增的類(一)

    經常看到有同學在討論Framework 4 的新特性,新方法,于是想寫個程序找出framework4.0中新增的方法和類
    2013-05-05
  • 用C#實現啟動另一程序的方法實例

    用C#實現啟動另一程序的方法實例

    一段實例代碼,程序的目的是使用C#實現啟動另一程序的方法。技術總監(jiān)給出了我們這樣一個有效的啟動程序的有效方法,現在和大家分享下
    2013-07-07
  • c# 實現發(fā)送郵件的功能

    c# 實現發(fā)送郵件的功能

    這篇文章主要介紹了c# 如何實現發(fā)送郵件的功能,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#識別出圖片里的數字和字母

    C#識別出圖片里的數字和字母

    本文給大家分享的是C#識別出圖片里的數字和字母的代碼,主要是識別以前公司的軟件注冊碼截圖里的數字和字母,功能很簡單,也存在很大的局限性,這里僅僅是分享,小伙伴們參考下。
    2015-03-03
  • C# Main方法的傳入參數研究

    C# Main方法的傳入參數研究

    這篇文章主要介紹了C# Main方法的傳入參數研究,相信大家不管是在java中還是C#中都經常見到public static void Main(string[] args)類似的語句,那這個args到底有什么用,你又知道多少呢?本文就專門研究了這個參數,相信可以讓漲姿勢,需要的朋友可以參考下
    2015-06-06
  • C#連接到sql server2008數據庫的實例代碼

    C#連接到sql server2008數據庫的實例代碼

    這篇文章主要介紹了C#連接到sql server2008數據庫的實例代碼,需要的朋友可以參考下
    2017-09-09
  • 輕松學習C#的正則表達式

    輕松學習C#的正則表達式

    輕松學習C#的正則表達式,對C#的正則表達式感興趣的朋友可以參考本篇文章,幫助大家更靈活的運用C#的正則表達式
    2015-11-11
  • 詳解c# 泛型類的功能

    詳解c# 泛型類的功能

    這篇文章主要介紹了c# 泛型類的功能,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-10-10
  • C#根據IP地址查詢所屬地區(qū)實例詳解

    C#根據IP地址查詢所屬地區(qū)實例詳解

    這篇文章主要介紹了C#根據IP地址查詢所屬地區(qū)實例詳解,調用的接口是免費的接口,有需要的同學可以研究下
    2021-03-03

最新評論