Windows 10 context menu - przekazanie kilku zaznaczonych plików do jednej aplikacji (IPC).

0

Zaznaczam kilka plików, klikam PPM i z menu wybieram wyślij do mojej aplikacji.

W rejestrze wszystko utworzone jak należy z %1.

Niestety zamiast jednej instancji aplikacji z wszystkimi argumentami uruchamiane są pojedyncze (każda z jednym argumentem).

Próbowałem przekazywać wszystkie argumenty przez named pipes - tworząc jeden serwer i przekazując wszystko klientami.

Wymyśliłem, że po uruchomieniu aplikacji będzie ona sprawdzała ile jest procesów o tej samej nazwie:

System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count()

i jeżeli jest tylko jeden to ma utworzyć serwer, a każdy następny proces klient. Niestety za każdym razem procesów jest: 2,3,4 ( w zależności od zaznaczonych plików).

Jak wobec tego ugryźć inaczej ten temat?

4

Możesz zapewnić, że jest uruchomiona tylko jedna instancja (i w razie potrzeby przekazać do niej informacje z innej, właśnie uruchamianej, instancji), z wykorzystaniem mutexu oraz właśnie named pipes.

Ja zrobiłem to kiedyś tak (gdzieś w funkcji Main w klasie Program):

// try to get the mutex
bool result;
var mutex = new System.Threading.Mutex(true, APPNAME, out result);

// if not, another instance is running
if (!result)
{
	// if the start was with parameters, send those
	// parameters to the running instance via IPC
	if (args.Length > 0)
	{
		if (args[0] == "connect")
			Ipc.WriteServer(".", APPNAME, (byte)IpcMessages.CONNECT);
		else if (args[0] == "disconnect")
			Ipc.WriteServer(".", APPNAME, (byte)IpcMessages.DISCONNECT);
	}

// ...

https://github.com/ktos/fa287a/blob/master/Fa287a/Program.cs#L51

(gdzie Ipc.WriteServer "pisało" do named pipes)

1 użytkowników online, w tym zalogowanych: 0, gości: 1