static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); string adminAccountName = null; string server = null; string domainName = null; ushort port = 3389; foreach (string arg in args) { if (arg.StartsWith("/user:"******"/server:", StringComparison.CurrentCultureIgnoreCase)) { server = arg.Substring(8); continue; } if (arg.StartsWith("/port:", StringComparison.CurrentCultureIgnoreCase)) { ushort.TryParse(arg.Substring(6), out port); continue; } if (arg.StartsWith("/?", StringComparison.CurrentCultureIgnoreCase)) { Usage(); return; } } if (adminAccountName == null || server == null) { Usage(); return; } if (adminAccountName.Contains("\\")) { string[] pairs = adminAccountName.Split('\\'); domainName = pairs[0]; adminAccountName = pairs[1]; } string password = null; try { PasswordInfo pwdInfo = PdsWrapper.GetManagedAccountPassword(null, adminAccountName, false); password = pwdInfo.Password; } catch (Exception ex) { MessageBox.Show($"Failed to retrieve password for account {adminAccountName}\nError: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { var form = new Form1(); form.SetCredentials(adminAccountName, domainName, password); form.SetServerName(server, port); Application.Run(form); } catch (Exception) { //do nothing now } }
static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); string adminAccountName = null; string server = null; string domainName = null; ushort port = 3389; foreach (string arg in args) { if (arg.StartsWith("/user:"******"/server:", StringComparison.CurrentCultureIgnoreCase)) { server = arg.Substring(8); continue; } if (arg.StartsWith("/port:", StringComparison.CurrentCultureIgnoreCase)) { ushort.TryParse(arg.Substring(6), out port); continue; } if (arg.StartsWith("/?", StringComparison.CurrentCultureIgnoreCase)) { Usage(); return; } } if (server == null) { Usage(); return; } PasswordInfo pwdInfo = null; try { //user name to use if (adminAccountName.Contains('\\')) { //domain\sAMAccountName string[] pairs = adminAccountName.Split('\\'); domainName = pairs[0]; adminAccountName = pairs[1]; pwdInfo = PdsWrapper.GetManagedAccountPassword(null, adminAccountName, false); } else if (adminAccountName.Contains('@')) { //upn pwdInfo = PdsWrapper.GetManagedAccountPassword(null, adminAccountName, false); } else { //local account domainName = server; if (adminAccountName == null) { //default admin name adminAccountName = "administrator"; } pwdInfo = PdsWrapper.GetLocalAdminPassword(null, server, false, false); } } catch (Exception ex) { MessageBox.Show($"Failed to retrieve password for account {adminAccountName}\nError: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { var form = new MainForm(); var cfg = new Configuration(); Int64 windowSize = cfg.LastWindowSize; if (windowSize > 0) { form.SetSize(windowSize); } form.SetCredentials(adminAccountName, domainName, pwdInfo.Password); form.SetServerName(server, port); Application.Run(form); cfg.LastWindowSize = form.GetSize(); cfg.Update(); } catch (Exception) { //do nothing now } }
static void Main(string[] args) { string adminAccountName = null; string pathToExecutable = null; string domainName = null; LogonFlags dwLogonFlags = LogonFlags.LOGON_WITH_PROFILE; foreach (string arg in args) { if (arg.StartsWith("/user:"******"/path:", StringComparison.CurrentCultureIgnoreCase)) { pathToExecutable = arg.Substring(6); continue; } if (arg.StartsWith("/noLocalProfile", StringComparison.CurrentCultureIgnoreCase)) { dwLogonFlags = LogonFlags.LOGON_NETCREDENTIALS_ONLY; continue; } if (arg.StartsWith("/?", StringComparison.CurrentCultureIgnoreCase)) { Usage(); return; } } if (adminAccountName == null || pathToExecutable == null) { Usage(); return; } if (adminAccountName.Contains("\\")) { string[] pairs = adminAccountName.Split('\\'); domainName = pairs[0]; adminAccountName = pairs[1]; } try { PasswordInfo pwdInfo = PdsWrapper.GetManagedAccountPassword(null, adminAccountName, false); StartupInfo si = new StartupInfo(); si.cb = Marshal.SizeOf(si); ProcessInformation pi = new ProcessInformation(); bool rslt = Native.CreateProcessWithLogonW(adminAccountName, domainName, pwdInfo.Password, (uint)dwLogonFlags, null, pathToExecutable, (uint)(CreationFlags.CREATE_NEW_PROCESS_GROUP | CreationFlags.ABOVE_NORMAL_PRIORITY_CLASS), 0, null, ref si, out pi); if (!rslt) { throw new System.ComponentModel.Win32Exception(Native.GetLastError()); } } catch (PDSException ex) { Console.WriteLine($"ERROR: {ex.Message}"); } catch (System.ComponentModel.Win32Exception ex) { Console.WriteLine($"ERROR: Failed to start process, Win32 return code: {ex.NativeErrorCode.ToString("X2")}"); } catch (Exception ex) { Console.WriteLine($"ERROR: {ex.Message}"); } }