[FW 4.5] Открытие файла в уже имеющемся процессе
От: karbofos42 Россия  
Дата: 18.06.21 13:51
Оценка:
Имеется программа на .NET FW 4.5, которая умеет открывать файлики. Программа эта должна работать в единственном экземпляре.
При открытии файла, Windows соответственно запускает новый процесс и аргументом передаёт путь к файлу. Если программа уже запущена, то файл не получится открыть двойным кликом, что печально и глупо заставлять закрывать программу, чтобы следом её опять открыть.
Только ручками прикручивать какой-нибудь IPC, пересылать из нового экземпляра аргументы командной строки и убиваться?
Или есть какое-нибудь решение попроще?
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
От: Ночной Смотрящий Россия  
Дата: 18.06.21 14:07
Оценка: :)
Здравствуйте, karbofos42, Вы писали:

K>Или есть какое-нибудь решение попроще?


В аргументах конструктора FileStream есть флажок FileShare. Почитай про него.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
От: alexander_r  
Дата: 18.06.21 15:56
Оценка: 2 (1)
Здравствуйте, karbofos42, Вы писали:

Если есть окно, можно через SendMessage + WndProc() передать командную строку из одного процесса в другой, и закрыть новый процесс
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
От: Xander Zerge Россия www.zerge.com
Дата: 20.06.21 15:30
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Или есть какое-нибудь решение попроще?

Нет. Даже если бы это поддерживалось операционкой, это всё равно была бы IPC — программа должна быть готова принимать информацию извне.
Соорудить простую IPC на memory-mapped file и EventWaitHandle несложно.
Серёжа Новиков,
программист
Re: [FW 4.5] Открытие файла в уже имеющемся процессе
От: varenikAA  
Дата: 21.06.21 01:47
Оценка:
Здравствуйте, 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: как правильно заметили все равно убиваться. так проще убиться в самом начале и не городить многопоточку из-за такого пустяка.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 21.06.2021 2:28 Разраб . Предыдущая версия .
Re[2]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: Xander Zerge Россия www.zerge.com
Дата: 21.06.21 07:49
Оценка: +1
Здравствуйте, varenikAA, Вы писали:

AA>Если ПО выполняется в консоли(один пользователь)

Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.
Серёжа Новиков,
программист
Re[3]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: varenikAA  
Дата: 22.06.21 01:27
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Здравствуйте, varenikAA, Вы писали:


AA>>Если ПО выполняется в консоли(один пользователь)

XZ>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.

Да нет, в сабже именно один экземпляр файла.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: Mr.Delphist  
Дата: 22.06.21 09:18
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Да нет, в сабже именно один экземпляр файла.


Программа эта должна работать в единственном экземпляре.

https://rsdn.org/forum/dotnet/8032507.1
Автор: karbofos42
Дата: 18.06.21
Re[3]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: karbofos42 Россия  
Дата: 22.06.21 15:12
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Здравствуйте, varenikAA, Вы писали:


AA>>Если ПО выполняется в консоли(один пользователь)

XZ>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.

Именно так
Re[4]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: Sharov Россия  
Дата: 22.06.21 15:16
Оценка:
Здравствуйте, karbofos42, Вы писали:

AA>>>Если ПО выполняется в консоли(один пользователь)

XZ>>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.
K>Именно так

Ну так надо по подобию word'а и сдеать. Как мс решает эту проблему?
Кодом людям нужно помогать!
Re[5]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: karbofos42 Россия  
Дата: 22.06.21 15:21
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, karbofos42, Вы писали:


AA>>>>Если ПО выполняется в консоли(один пользователь)

XZ>>>Насколько я понял, нужно передать работающей программе кликнутый файл. Может, она с двумя файлами будет работать, зачем её работающую убивать? То есть, по типу MS Word — кликнули второй файл, открылся в том же процессе, что и первый.
K>>Именно так

S>Ну так надо по подобию word'а и сдеать. Как мс решает эту проблему?


откуда ж я знаю как они это делают?
Re[6]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: Sharov Россия  
Дата: 22.06.21 15:25
Оценка:
Здравствуйте, karbofos42, Вы писали:

S>>Ну так надо по подобию word'а и сдеать. Как мс решает эту проблему?

K>откуда ж я знаю как они это делают?

Гугл может подсказать. Например, https://www.codeproject.com/Articles/1191863/Opening-a-specific-file-format-with-a-single-insta
Кодом людям нужно помогать!
Re[5]: [FW 4.5] Открытие файла в уже имеющемся процессе
От: varenikAA  
Дата: 23.06.21 01:13
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Здравствуйте, varenikAA, Вы писали:


AA>>Да нет, в сабже именно один экземпляр файла.


MD>

MD>Программа эта должна работать в единственном экземпляре.

MD>https://rsdn.org/forum/dotnet/8032507.1
Автор: karbofos42
Дата: 18.06.21


В том-то и дело что постановки задачи нет, а мы тут на кофейной гуще гадаем.
я делал похожее просто — если есть аргумент кидал файл-флаг в папку которую мониторит filewatch.
Главное не забыть что это разные потоки.
можно пойти дальше и использовать сокеты или каналы.
Да, сейчас сложно найти именно разраба, способного четко определить условия задачи.
Большинство инженеров считая себя крутыми хакерами, эх...
Да и аналитика. ТЗ часто выглядит как сочинения "как я провел лето".
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.