Сообщение Re: [FW 4.5] Открытие файла в уже имеющемся процессе от 21.06.2021 1:47
Изменено 21.06.2021 2:28 Разраб
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, karbofos42, Вы писали:
K>Имеется программа на .NET FW 4.5, которая умеет открывать файлики. Программа эта должна работать в единственном экземпляре.
K>При открытии файла, Windows соответственно запускает новый процесс и аргументом передаёт путь к файлу. Если программа уже запущена, то файл не получится открыть двойным кликом, что печально и глупо заставлять закрывать программу, чтобы следом её опять открыть.
K>Только ручками прикручивать какой-нибудь IPC, пересылать из нового экземпляра аргументы командной строки и убиваться?
K>Или есть какое-нибудь решение попроще?
Если ПО выполняется в консоли:
Если в терминальной сессии то через Mutex (hint keywords: префикс global)
K>Имеется программа на .NET FW 4.5, которая умеет открывать файлики. Программа эта должна работать в единственном экземпляре.
K>При открытии файла, Windows соответственно запускает новый процесс и аргументом передаёт путь к файлу. Если программа уже запущена, то файл не получится открыть двойным кликом, что печально и глупо заставлять закрывать программу, чтобы следом её опять открыть.
K>Только ручками прикручивать какой-нибудь IPC, пересылать из нового экземпляра аргументы командной строки и убиваться?
K>Или есть какое-нибудь решение попроще?
Если ПО выполняется в консоли:
using System;
using System.Diagnostics;
namespace Proba3
{
class Program
{
static void Main(string[] args)
{
var current = Process.GetCurrentProcess();
var proccesses = Process.GetProcesses();
foreach(var proccess in proccesses)
{
if(proccess.Id == current.Id)
continue;
if(proccess.MainModule.FileName == current.MainModule.FileName)
{
proccess.Kill(true);
break;
}
}
Console.WriteLine($"Do something with file {args[0]}");
}
}
}
Если в терминальной сессии то через Mutex (hint keywords: префикс global)
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, karbofos42, Вы писали:
K>Имеется программа на .NET FW 4.5, которая умеет открывать файлики. Программа эта должна работать в единственном экземпляре.
K>При открытии файла, Windows соответственно запускает новый процесс и аргументом передаёт путь к файлу. Если программа уже запущена, то файл не получится открыть двойным кликом, что печально и глупо заставлять закрывать программу, чтобы следом её опять открыть.
K>Только ручками прикручивать какой-нибудь IPC, пересылать из нового экземпляра аргументы командной строки и убиваться?
K>Или есть какое-нибудь решение попроще?
Если ПО выполняется в консоли(один пользователь):
Если в терминальной сессии то через Mutex (hint keywords: префикс global)
UPD: как правильно заметили все равно убиваться. так проще убиться в самом начале и не городить многопоточку из-за такого пустяка.
K>Имеется программа на .NET FW 4.5, которая умеет открывать файлики. Программа эта должна работать в единственном экземпляре.
K>При открытии файла, Windows соответственно запускает новый процесс и аргументом передаёт путь к файлу. Если программа уже запущена, то файл не получится открыть двойным кликом, что печально и глупо заставлять закрывать программу, чтобы следом её опять открыть.
K>Только ручками прикручивать какой-нибудь IPC, пересылать из нового экземпляра аргументы командной строки и убиваться?
K>Или есть какое-нибудь решение попроще?
Если ПО выполняется в консоли(один пользователь):
using System;
using System.Diagnostics;
namespace Proba3
{
class Program
{
static void Main(string[] args)
{
var current = Process.GetCurrentProcess();
var proccesses = Process.GetProcesses();
foreach(var proccess in proccesses)
{
if(proccess.Id == current.Id)
continue;
if(proccess.MainModule.FileName == current.MainModule.FileName)
{
proccess.Kill(true);
break;
}
}
Console.WriteLine($"Do something with file {args[0]}");
}
}
}
Если в терминальной сессии то через Mutex (hint keywords: префикс global)
UPD: как правильно заметили все равно убиваться. так проще убиться в самом начале и не городить многопоточку из-за такого пустяка.