我在寫 Windows Service 需要撈 AD 帳號,
如果 this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User;
當服務啟動時就需要輸入使用者帳號密碼;如果設定為 NetworkService、LocalService、LocalSystem 就會抓不到 user 的 AD 帳號。
請問有什麼方式可以讓服務安裝時不需輸入使用者 AD,服務就能啟動?
還是有其他方式可以讓 Service 抓到 user 登入時的帳號?
感謝大家!!
偷懶方式
自己敲帳密,讓服務記住啟動帳戶
正規方式
1.Windows Server 2008 以上
2.要有AD
3.Net Framework 3.5或更高版本
4.要有KDS服務或者網域有建立CA服務
5.建立GMSA帳戶
6.設定服務使用GMSA帳戶
請問有什麼方式可以讓服務安裝時不需輸入使用者 AD,服務就能啟動?
試試使用 LocalSystem 帳號啟動服務,因為 LocalSystem 帳號通常具有較高的系統權限。
class MyService : ServiceBase
{
protected override void OnStart(string[] args)
{
//將服務的帳號設定為 LocalSystem
serviceProcessInstaller1.Account = ServiceAccount.LocalSystem;
// 取得目前登入使用者的帳號
string username = WindowsIdentity.GetCurrent().Name;
// 取得使用者的 Active Directory 資訊
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);
Console.WriteLine("Username: " + user.SamAccountName);
Console.WriteLine("Email: " + user.EmailAddress);
Console.WriteLine("Department: " + user.Department);
}
}
}