Программа не выполняет свои функции.
Цитата: Егор от 11.02.2025, 19:57Здравствуйте. Около месяца назад писал программу для "Перевоспитания" vmware . Сейчас есть потребность сделать подобное с PostgreSQL 15 и DBeaver.
Я сделал такой же проект, но почему-то программа не выполняет свои функции от слова совсем. Не запускает службы и процессы, а так же работает, когда отсутствует процесс DBeaver, отсутствие которого должно говорить программе, что пора глушить службы и процессы. Честно говоря, сам понять не могу, из-за чего такое происходит. Прикладываю код и прошу помочь разобраться в данной проблеме. Заранее спасибо.[spoiler title="Код"]
using System; using System.Diagnostics; using System.Threading.Tasks; using System.Windows.Forms; namespace DataBase_Laucnher { public partial class DataBase_Launcher : Form { public DataBase_Launcher() { InitializeComponent(); } async void LauncherForm_Load(object sender, EventArgs e) { // Список служб для управления ими string[] services = { "postgresql-x64-15" }; // Перевод служб в режим "Автоматически" foreach (var service in services) { cmd($"sc config \"{service}\" start= auto"); } // Запуск служб PostgreSQL foreach (var service in services) { cmd($"sc start \"{service}\""); } // Запуск необходимых процессов cmd("start \"\" \"C:\\Program Files\\PostgreSQL\\15\\bin\\pg_ctl.exe\""); cmd("start \"\" \"C:\\Program Files\\PostgreSQL\\15\\bin\\postgres.exe\""); cmd("start \"\" \"C:\\Program Files\\DBeaver\\dbeaver.exe\""); // Ожидание закрытия DBeaver и PostgreSQL while (Process.GetProcessesByName("DBeaver Community").Length > 0 ) { await Task.Delay(5000); // Проверка каждые 5 секунд } // Остановка служб foreach (var service in services) { cmd($"sc stop \"{service}\""); } // Перевод служб в режим "отключено" foreach (var service in services) { cmd($"sc config \"{service}\" start= disabled"); } // Завершение всех процессов DBeaver и PostgreSQL cmd("taskkill /f /im postgres.exe & taskkill /f /im pg_ctl.exe & taskkill /f /im dbeaver.exe"); // Завершение текущего процесса (лаунчера) Application.Exit(); } void cmd(string line) { ProcessStartInfo processInfo = new ProcessStartInfo { FileName = "cmd.exe", Arguments = $"/c {line}", WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, // Скрыть окно UseShellExecute = false // Не использовать оболочку }; using (Process process = Process.Start(processInfo)) { process.WaitForExit(); // Ожидание завершения команды } } } }
[/spoiler]
Здравствуйте. Около месяца назад писал программу для "Перевоспитания" vmware . Сейчас есть потребность сделать подобное с PostgreSQL 15 и DBeaver.
Я сделал такой же проект, но почему-то программа не выполняет свои функции от слова совсем. Не запускает службы и процессы, а так же работает, когда отсутствует процесс DBeaver, отсутствие которого должно говорить программе, что пора глушить службы и процессы. Честно говоря, сам понять не могу, из-за чего такое происходит. Прикладываю код и прошу помочь разобраться в данной проблеме. Заранее спасибо.
Скопировано
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DataBase_Laucnher
{
public partial class DataBase_Launcher : Form
{
public DataBase_Launcher()
{
InitializeComponent();
}
async void LauncherForm_Load(object sender, EventArgs e)
{
// Список служб для управления ими
string[] services = { "postgresql-x64-15" };
// Перевод служб в режим "Автоматически"
foreach (var service in services)
{
cmd($"sc config \"{service}\" start= auto");
}
// Запуск служб PostgreSQL
foreach (var service in services)
{
cmd($"sc start \"{service}\"");
}
// Запуск необходимых процессов
cmd("start \"\" \"C:\\Program Files\\PostgreSQL\\15\\bin\\pg_ctl.exe\"");
cmd("start \"\" \"C:\\Program Files\\PostgreSQL\\15\\bin\\postgres.exe\"");
cmd("start \"\" \"C:\\Program Files\\DBeaver\\dbeaver.exe\"");
// Ожидание закрытия DBeaver и PostgreSQL
while (Process.GetProcessesByName("DBeaver Community").Length > 0 )
{
await Task.Delay(5000); // Проверка каждые 5 секунд
}
// Остановка служб
foreach (var service in services)
{
cmd($"sc stop \"{service}\"");
}
// Перевод служб в режим "отключено"
foreach (var service in services)
{
cmd($"sc config \"{service}\" start= disabled");
}
// Завершение всех процессов DBeaver и PostgreSQL
cmd("taskkill /f /im postgres.exe & taskkill /f /im pg_ctl.exe & taskkill /f /im dbeaver.exe");
// Завершение текущего процесса (лаунчера)
Application.Exit();
}
void cmd(string line)
{
ProcessStartInfo processInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = $"/c {line}",
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true, // Скрыть окно
UseShellExecute = false // Не использовать оболочку
};
using (Process process = Process.Start(processInfo))
{
process.WaitForExit(); // Ожидание завершения команды
}
}
}
}
Скопировано