一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C# 改變Windows中服務(wù)的登錄身份 (賬戶名和密碼)

 Coder編程 2021-03-26

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

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

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

private const int SC_MANAGER_ALL_ACCESS = 0x000F003F;
private const uint SERVICE_NO_CHANGE = 0xffffffff;  //這個(gè)值可以在 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("打開服務(wù)管理器錯(cuò)誤");
 
        IntPtr service_Handle = OpenService(scm_Handle, serviceName,SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG);
        if (service_Handle == IntPtr.Zero)
          throw new System.Runtime.InteropServices.ExternalException("打開服務(wù)錯(cuò)誤");
//修改服務(wù)的賬戶用戶名和密碼 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("無法修改服務(wù)登錄身份的用戶名和密碼:" + win32Exception.Message); } Console.WriteLine("服務(wù)登錄身份信息修改成功!"); return true; } catch (Exception ex) { Console.WriteLine(ex.ToString()); return false; } }

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

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

注意:如果您的遠(yuǎn)程計(jì)算機(jī)連接的是 Active Directory 域,那么使用完全限定的用戶名(例如 TestDomainMorgan)而不是簡(jiǎn)單的用戶名(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("服務(wù)登錄身份信息修改成功!");
        }
        else
        {
             Console.WriteLine("服務(wù)登錄身份信息修改失敗");
             Console.WriteLine("錯(cuò)誤代碼:" + returnCode);
             // 此微軟官方支持鏈接,可以查看相應(yīng)的返回代碼的消息:
             // https://msdn.microsoft.com/en-us/library/aa393660(v=vs.85).aspx
        }
    }
}

 3、使用 C#中的 WMI 修改遠(yuǎn)程計(jì)算機(jī)服務(wù)的登錄身份信息:

使用 WMI 服務(wù),我們需要添加 System.Management 的引用,并且在修改遠(yuǎn)程計(jì)算機(jī)中的服務(wù)信息時(shí),請(qǐng)使用管理員憑據(jù)。

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

using System.Management;
static void ChangeRemoteServiceAccountInfo(string remoteComputer, string serviceName, string username, string password) { try { ConnectionOptions connectionOptions = new ConnectionOptions(); // 如需要,請(qǐng)使用證書 //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("服務(wù)登錄身份信息修改成功!"); } else { Console.WriteLine("服務(wù)登錄身份信息修改失敗"); Console.WriteLine("錯(cuò)誤代碼:" + returnCode); // 此微軟官方支持鏈接,可以查看相應(yīng)的返回代碼信息: // https://msdn.microsoft.com/en-us/library/aa393660(v=vs.85).aspx } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }

原創(chuàng)出處:https:///2015/03/csharp-change-service-account-username-and-password.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩精品毛片视频免费看| 日韩一级免费中文字幕视频| 蜜桃av人妻精品一区二区三区 | 少妇毛片一区二区三区| 国产av一区二区三区四区五区| 午夜福利网午夜福利网| 国产精品日韩精品最新| 国产亚洲二区精品美女久久| 国产精品涩涩成人一区二区三区| 色婷婷视频免费在线观看| 欧美日韩亚洲精品在线观看| 国产老女人性生活视频| 不卡免费成人日韩精品| 久久永久免费一区二区| 日韩一区二区三区四区乱码视频| 国产欧洲亚洲日产一区二区| 日本成人三级在线播放| 亚洲高清一区二区高清| 国产伦精品一区二区三区高清版| 少妇人妻无一区二区三区| 国产欧美日产久久婷婷| 九九蜜桃视频香蕉视频| 九九热精品视频在线观看| 亚洲国产av国产av| 国产精品日韩精品一区| 国产日韩熟女中文字幕| 国产色第一区不卡高清| 国产免费观看一区二区| 久久黄片免费播放大全| 高中女厕偷拍一区二区三区| 亚洲一区二区三区在线免费| 国产一区二区三区丝袜不卡| 国产一级二级三级观看| 亚洲精品一区二区三区免| 麻豆一区二区三区精品视频| 成年男女午夜久久久精品| 东京热男人的天堂久久综合| 五月天丁香婷婷狠狠爱| 日本加勒比系列在线播放| 国产三级视频不卡在线观看| 亚洲国产成人精品福利|