Как закрыть выход и перезапустить программу - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть программа, и я проверяю, есть ли запущенный экземпляр, и если есть запущенный экземпляр, он должен завершить работающую программу и запустить мое приложение ... прежде чем я просто попросил пользователя, что есть работающий экземпляр, ипросто закройте программу.Теперь пользователь хочет, чтобы программа просто завершила этот экземпляр и запустила приложение.

if (Process.GetProcessesByName(Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location)).Length > 1)
{
 //MessageBox.Show("Another instance of the Program is Running", Global.ProgName, MessageBoxButton.OK, MessageBoxImage.Information);
 //Environment.Exit(0);
 foreach (var process in Process.GetProcessesByName(Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location)))
 {
    process.Kill();
 }
 Process.Start(Path.GetFileName(Assembly.GetEntryAssembly().Location));
}

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019
if(Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location)).Length > 1)
{
    foreach (var process in Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location)))
    {
        if (process.Id != Process.GetCurrentProcess().Id)
        {
            process.Kill();
        }
    }
}

Этот код получает процессы с тем же именем, что и у вас, и убивает старые, новый - убийственный.

enter image description here

1 голос
/ 20 сентября 2019

Это не чисто, но вы можете использовать команду оболочки:

ProcessStartInfo Info = new ProcessStartInfo();
Info.Arguments = "/C ping 127.0.0.1 -n 4 && cd \"" + Application.StartupPath + "\" &&  filename.exe";
Info.WindowStyle = ProcessWindowStyle.Hidden;
Info.CreateNoWindow = true;
Info.FileName = "cmd.exe";
System.Timers.Timer t = new System.Timers.Timer(1000);
t.Elapsed += T_Elapsed;
t.Start();
Process.Start(Info);

private void T_Elapsed(object sender, ElapsedEventArgs e)
{
    Application.Exit();
}

Команда оболочки пингует localhost 4 раза, чтобы пройти время, и во время этих пингов программа завершается.Исходная команда оболочки все еще выполняется после выхода из программы, поэтому программа снова открывается после проверки связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...