public async Task ConfigureAsync(CommandSettings command) { if (!_windowsServiceHelper.IsRunningInElevatedMode()) { Trace.Error("Needs Administrator privileges to configure agent with AutoLogon capability."); throw new SecurityException(StringUtil.Loc("NeedAdminForAutologonCapability")); } string domainName; string userName; string logonAccount; string logonPassword; while (true) { logonAccount = command.GetWindowsLogonAccount(defaultValue: string.Empty, descriptionMsg: StringUtil.Loc("AutoLogonAccountNameDescription")); GetAccountSegments(logonAccount, out domainName, out userName); if ((string.IsNullOrEmpty(domainName) || domainName.Equals(".", StringComparison.CurrentCultureIgnoreCase)) && !logonAccount.Contains("@")) { logonAccount = String.Format("{0}\\{1}", Environment.MachineName, userName); } Trace.Info("LogonAccount after transforming: {0}, user: {1}, domain: {2}", logonAccount, userName, domainName); logonPassword = command.GetWindowsLogonPassword(logonAccount); if (_windowsServiceHelper.IsValidAutoLogonCredential(domainName, userName, logonPassword)) { Trace.Info("Credential validation succeeded"); break; } if (command.Unattended) { throw new SecurityException(StringUtil.Loc("InvalidAutoLogonCredential")); } Trace.Error("Invalid credential entered."); _terminal.WriteError(StringUtil.Loc("InvalidAutoLogonCredential")); } _autoLogonRegManager.UpdateRegistrySettings(command, domainName, userName, logonPassword); _windowsServiceHelper.SetAutoLogonPassword(logonPassword); await ConfigurePowerOptions(); SaveAutoLogonSettings(domainName, userName); RestartBasedOnUserInput(command); }
public async Task ConfigureAsync(CommandSettings command) { ArgUtil.NotNull(command, nameof(command)); if (!_windowsServiceHelper.IsRunningInElevatedMode()) { Trace.Error("Needs Administrator privileges to configure agent with AutoLogon capability."); throw new SecurityException(StringUtil.Loc("NeedAdminForAutologonCapability")); } string domainName; string userName; string logonAccount; string logonPassword; while (true) { logonAccount = command.GetWindowsLogonAccount(defaultValue: string.Empty, descriptionMsg: StringUtil.Loc("AutoLogonAccountNameDescription")); GetAccountSegments(logonAccount, out domainName, out userName); if ((string.IsNullOrEmpty(domainName) || domainName.Equals(".", StringComparison.CurrentCultureIgnoreCase)) && !logonAccount.Contains("@")) { logonAccount = String.Format("{0}\\{1}", Environment.MachineName, userName); domainName = Environment.MachineName; } Trace.Info("LogonAccount after transforming: {0}, user: {1}, domain: {2}", logonAccount, userName, domainName); logonPassword = command.GetWindowsLogonPassword(logonAccount); if (_windowsServiceHelper.IsValidAutoLogonCredential(domainName, userName, logonPassword)) { Trace.Info("Credential validation succeeded"); break; } if (command.Unattended()) { throw new SecurityException(StringUtil.Loc("InvalidAutoLogonCredential")); } Trace.Error("Invalid credential entered."); _terminal.WriteError(StringUtil.Loc("InvalidAutoLogonCredential")); } _autoLogonRegManager.GetAutoLogonUserDetails(out string currentAutoLogonUserDomainName, out string currentAutoLogonUserName); if (currentAutoLogonUserName != null && !userName.Equals(currentAutoLogonUserName, StringComparison.CurrentCultureIgnoreCase) && !domainName.Equals(currentAutoLogonUserDomainName, StringComparison.CurrentCultureIgnoreCase)) { string currentAutoLogonAccount = String.Format("{0}\\{1}", currentAutoLogonUserDomainName, currentAutoLogonUserName); if (string.IsNullOrEmpty(currentAutoLogonUserDomainName) || currentAutoLogonUserDomainName.Equals(".", StringComparison.CurrentCultureIgnoreCase)) { currentAutoLogonAccount = String.Format("{0}\\{1}", Environment.MachineName, currentAutoLogonUserName); } Trace.Warning($"AutoLogon already enabled for {currentAutoLogonAccount}."); if (!command.GetOverwriteAutoLogon(currentAutoLogonAccount)) { Trace.Error("Marking the agent configuration as failed due to the denial of autologon setting overwriting by the user."); throw new InvalidOperationException(StringUtil.Loc("AutoLogonOverwriteDeniedError", currentAutoLogonAccount)); } Trace.Info($"Continuing with the autologon configuration."); } // grant permission for agent root folder and work folder Trace.Info("Create local group and grant folder permission to logon account."); string agentRoot = HostContext.GetDirectory(WellKnownDirectory.Root); string workFolder = HostContext.GetDirectory(WellKnownDirectory.Work); Directory.CreateDirectory(workFolder); _windowsServiceHelper.GrantDirectoryPermissionForAccount(logonAccount, new[] { agentRoot, workFolder }); _autoLogonRegManager.UpdateRegistrySettings(command, domainName, userName, logonPassword); _windowsServiceHelper.SetAutoLogonPassword(logonPassword); await ConfigurePowerOptions(); SaveAutoLogonSettings(domainName, userName); RestartBasedOnUserInput(command); }