private void start_Click(object sender, EventArgs e) { try { var runningProcs = from proc in Process.GetProcesses(".") orderby proc.Id select proc; if (runningProcs.Count(p => p.ProcessName.Contains("Dayz" + name)) > 0) { Button button = (Button)sender; button.Enabled = false; MessageBox.Show("Ошибка: Вы пытаетесь запустить приложение повторно!", "Error: You try to start the application repeatedly!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } else { string startgame = StartParams.Text; string Arguments = " -beta=Expansion\\beta\\Expansion" + " -mod=" + mod + " -connect=" + serverip + " -port=" + serverport + " " + startgame; // string pathFile = "Expansion/beta/arma2oa.exe"; string pathRun = "Expansion/beta/Dayz" + name + ".exe"; if (File.Exists(pathFile)) { if (File.Exists(pathRun)) { message = auth; message = string.Format("{0}: {1}", ip, message); message = AESEncryption.Encrypt(message, Pass, Salt); // преобразуем сообщение в массив байтов byte[] data = Encoding.Unicode.GetBytes(message); // отправка сообщения stream.Write(data, 0, data.Length); // получаем ответ data = new byte[64]; // буфер для получаемых данных StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (stream.DataAvailable); message = builder.ToString(); message = AESEncryption.Decrypt(message, Pass, Salt); if (message == "OK") { try { string md5 = ComputeMD5Checksum("Expansion\\beta\\Dayz" + name + ".exe"); if (md5 == md5client) { Process.Start("Expansion\\beta\\Dayz" + name + ".exe", Arguments); this.WindowState = FormWindowState.Minimized; int isarmarun = 0, kill = 0; while (isarmarun != 1) { System.Threading.Thread.Sleep(5000); md5 = ComputeMD5Checksum("Expansion\\beta\\Dayz" + name + ".exe"); if (md5 != md5client) { kill = 1; } var runningProcswhile = from proc in Process.GetProcesses(".") orderby proc.Id select proc; if (runningProcswhile.Count(p => p.ProcessName.Contains("Wireshark")) > 0) { kill = 1; } if (runningProcswhile.Count(p => p.ProcessName.Contains("skriptexecuter2")) > 0) { kill = 1; } if (runningProcswhile.Count(p => p.ProcessName.Contains("WpePro")) > 0) { kill = 1; } if (runningProcswhile.Count(p => p.ProcessName.Contains("ArmA2OA")) > 0) { kill = 1; } if (runningProcswhile.Count(p => p.ProcessName.Contains("Dayz" + name)) > 1) { kill = 1; } message = ping; message = String.Format("{0}: {1}", ip, message); message = AESEncryption.Encrypt(message, Pass, Salt); // преобразуем сообщение в массив байтов data = Encoding.Unicode.GetBytes(message); // отправка сообщения stream.Write(data, 0, data.Length); // получаем ответ data = new byte[64]; // буфер для получаемых данных builder = new StringBuilder(); bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (stream.DataAvailable); message = builder.ToString(); message = AESEncryption.Decrypt(message, Pass, Salt); if (message != "OK") { kill = 1; } string target_name = "Dayz" + name; Process[] local_procs = Process.GetProcesses(); try { Process target_proc = local_procs.First(p => p.ProcessName == target_name); if (kill == 1) { target_proc.Kill(); } } catch (InvalidOperationException) { isarmarun = 1; this.WindowState = FormWindowState.Normal; } } if (message != "OK") { MessageBox.Show("Ошибка: Не получен ответ от сервера.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } message = deauth; message = String.Format("{0}: {1}", ip, message); message = AESEncryption.Encrypt(message, Pass, Salt); // преобразуем сообщение в массив байтов data = Encoding.Unicode.GetBytes(message); // отправка сообщения stream.Write(data, 0, data.Length); // получаем ответ data = new byte[64]; // буфер для получаемых данных builder = new StringBuilder(); bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (stream.DataAvailable); message = builder.ToString(); message = AESEncryption.Decrypt(message, Pass, Salt); if (message != "OK") { MessageBox.Show("Ошибка: Не получен ответ от сервера.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } } else { try { File.Delete("Expansion\\beta\\Dayz" + name + ".exe"); WebClient webClient = new WebClient(); webClient.DownloadFile(secure + "://" + siteaddr + "/Dayz" + name + ".exe", @"Expansion\\beta\\Dayz" + name + ".exe"); MessageBox.Show("Ошибка: Клиент не присутствовал и был закачен. Запустите игру заново.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } catch (Exception) { } } } catch (Exception) { } } else { MessageBox.Show("Ошибка: Ошибка аунтификации.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } } else { try { WebClient webClient = new WebClient(); webClient.DownloadFile(secure + "://" + siteaddr + "/Dayz" + name + ".exe", @"Expansion\\beta\\Dayz" + name + ".exe"); MessageBox.Show("Ошибка: Клиент не присутствовал и был закачен. Запустите игру заново.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } catch (Exception) { } } } else { MessageBox.Show("/Expansion/beta/arma2oa.exe не найден. Убедитесь что лаунчер лежит в папке с игрой.", "The file isn't found", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); } } } catch (Exception) { } }
private void Form1_Load(object sender, EventArgs e) { { try { StartParams.Text = Properties.Settings.Default.StartParams; labelServer.Text = servernames; } catch (Exception) { } try { var runningProcs = from proc in Process.GetProcesses(".") orderby proc.Id select proc; // Проверяем что запущен только один лаунчер if (runningProcs.Count(p => p.ProcessName.Contains(name)) > 1) { if (runningProcs.Count(p => p.ProcessName.Contains("Launcher.vshost")) > 1) { } else { Close(); } }// если лаунчер запущен отменяем запуск дубликата if (runningProcs.Count(p => p.ProcessName.Contains("Wireshark")) > 0) { Close(); } // если Wireshark запущен отменяем запуск if (runningProcs.Count(p => p.ProcessName.Contains("skriptexecuter2")) > 0) { Close(); } } catch (Exception) { } try { if (File.Exists("Update.exe")) { try { File.Delete("Update.exe"); } catch (Exception) { } } string line = ver; WebClient clientt = new WebClient(); Stream streamm = clientt.OpenRead(secure + "://" + siteaddr + "/ver.php"); StreamReader sr = new StreamReader(streamm); line = sr.ReadLine(); streamm.Close(); streamm = clientt.OpenRead(secure + "://" + siteaddr + "/ip.php"); sr = new StreamReader(streamm); ip = sr.ReadLine(); streamm.Close(); int result = string.Compare(line, ver); if (result != 0) { try { WebClient webUpdate = new WebClient(); webUpdate.DownloadFile(secure + "://" + siteaddr + "/Update.exe", @"Update.exe"); Process.Start("Update.exe"); } catch (Exception) { } Close(); } } catch (Exception) { MessageBox.Show("Не удалось подключится к серверу.", "Проверьте подключение к интернету.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); Close(); } try { client = new TcpClient(address, port); stream = client.GetStream(); message = ping; message = string.Format("{0}: {1}", ip, message); message = AESEncryption.Encrypt(message, Pass, Salt); byte[] data = Encoding.Unicode.GetBytes(message); stream.Write(data, 0, data.Length); // получаем ответ data = new byte[64]; // буфер для получаемых данных StringBuilder builder = new StringBuilder(); int bytes = 0; do { bytes = stream.Read(data, 0, data.Length); builder.Append(Encoding.Unicode.GetString(data, 0, bytes)); }while (stream.DataAvailable); message = builder.ToString(); message = AESEncryption.Decrypt(message, Pass, Salt); Console.WriteLine("Сервер: {0}", message); if (message == reply) { } else { MessageBox.Show("Некорректный ответ сервера", "Проверьте подключение к интернету.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); Close(); } } catch (Exception) { MessageBox.Show("Не удалось подключится к серверу. Проверьте подключение к интернету или время на компьютере.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly); Close(); } } }