public override void Run() { if (!Validate()) { return; } var rdcPath = CreatePath(Settings.Default.RdcPath); //Убиваем все, что движется KillProcessByFileName(Path.GetFileName(rdcPath)); //Копируем шаблон string text; using (var fs = File.Open(GetRdpFileTemplateName(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (var sr = new StreamReader(fs, Encoding.Unicode)) { text = sr.ReadToEnd(); } } //Валидация if (!ValidateRdpFileTemplate(text)) { return; } var rdpf = new StringBuilder(); rdpf.AppendLine(string.Format("{0}:s:{1}", ServerAttributeName, Settings.Default.Server)); rdpf.AppendLine(string.Format("{0}:s:{1}", DomainAttributeName, Settings.Default.Domain)); rdpf.AppendLine(string.Format("{0}:s:{1}", UserNameAttributeName, Login)); rdpf.AppendLine(string.Format("{0}{1}{2}", PasswordAttributeName, PasswordTypeAttributeName, DPAPI.RdpEncrypt(Pwd))); var templateTxt = text.Trim(); while (templateTxt.EndsWith("\n") || templateTxt.EndsWith("\r")) { templateTxt = templateTxt.Substring(0, templateTxt.Length - 1); } rdpf.AppendLine(templateTxt); using (var fs = File.Open(RdpFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) { using (var sw = new StreamWriter(fs, Encoding.Unicode)) { sw.Write(rdpf.ToString()); } } //Стартуем процесс Start(new ProcessStartInfo(RdpFileName, string.Empty) { Arguments = Path.GetFileName(RdpFileName), WorkingDirectory = Path.GetDirectoryName(RdpFileName), UseShellExecute = true, Verb = "open" }); }