Имеется программа на .NET FW 4.5, которая умеет открывать файлики. Программа эта должна работать в единственном экземпляре.
При открытии файла, Windows соответственно запускает новый процесс и аргументом передаёт путь к файлу. Если программа уже запущена, то файл не получится открыть двойным кликом, что печально и глупо заставлять закрывать программу, чтобы следом её опять открыть.
Только ручками прикручивать какой-нибудь IPC, пересылать из нового экземпляра аргументы командной строки и убиваться?
Или есть какое-нибудь решение попроще?
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, karbofos42, Вы писали:
K>Или есть какое-нибудь решение попроще?
Нет. Даже если бы это поддерживалось операционкой, это всё равно была бы IPC — программа должна быть готова принимать информацию извне.
Соорудить простую IPC на memory-mapped file и EventWaitHandle несложно.
Серёжа Новиков,
программист
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, karbofos42, Вы писали:
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: как правильно заметили все равно убиваться. так проще убиться в самом начале и не городить многопоточку из-за такого пустяка.
Здравствуйте, varenikAA, Вы писали:
AA>Если ПО выполняется в консоли(один пользователь)
Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.
Серёжа Новиков,
программист
Re[3]: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, Xander Zerge, Вы писали:
XZ>Здравствуйте, varenikAA, Вы писали:
AA>>Если ПО выполняется в консоли(один пользователь) XZ>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.
Да нет, в сабже именно один экземпляр файла.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, Xander Zerge, Вы писали:
XZ>Здравствуйте, varenikAA, Вы писали:
AA>>Если ПО выполняется в консоли(один пользователь) XZ>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.
Именно так
Re[4]: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, karbofos42, Вы писали:
AA>>>Если ПО выполняется в консоли(один пользователь) XZ>>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый. K>Именно так
Ну так надо по подобию word'а и сдеать. Как мс решает эту проблему?
Кодом людям нужно помогать!
Re[5]: [FW 4.5] Открытие файла в уже имеющемся процессе
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, karbofos42, Вы писали:
AA>>>>Если ПО выполняется в консоли(один пользователь) XZ>>>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый. K>>Именно так
S>Ну так надо по подобию word'а и сдеать. Как мс решает эту проблему?
откуда ж я знаю как они это делают?
Re[6]: [FW 4.5] Открытие файла в уже имеющемся процессе
В том-то и дело что постановки задачи нет, а мы тут на кофейной гуще гадаем.
я делал похожее просто — если есть аргумент кидал файл-флаг в папку которую мониторит filewatch.
Главное не забыть что это разные потоки.
можно пойти дальше и использовать сокеты или каналы.
Да, сейчас сложно найти именно разраба, способного четко определить условия задачи.
Большинство инженеров считая себя крутыми хакерами, эх...
Да и аналитика. ТЗ часто выглядит как сочинения "как я провел лето".