IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
HONZ4
Člen
Avatar
HONZ4:3.7.2017 20:55

Zdravím vás, potřeboval bych poradit jak rozumně vyřešit tento problém:
Mám aplikaci, která zpracovává data a hned potom se ukončí. Protože někdy zpracování dat trvá dlouho, opatřil jsem ji volbou "po dokončení vypnout počítač".
PC vypínám takto:

var psi = new ProcessStartInfo("shutdown", "/s /t 0");
                psi.CreateNoWindow = true;
                psi.UseShellExecute = false;
                Process.Start(psi);

Tato aplikace, že může běžet ve více instancích.
Problém nastane, pokud "trouba uživatel" v jedné instanci aktivuje vypnutí pc a tato instance vypne počítač dřív, než jiná instance této aplikace dokončí zpracování dat.
Nenapadá vás nějaký rozumný způsob, jak by se dal tento problém vyřešit. Tedy jak na to, aby se počítač vypnul pokud je v některé instanci aktivováno vypnutí pc, ale aby počkal až se všechny instance mé aplikace ukončí.

Editováno 3.7.2017 20:58
 
Odpovědět
3.7.2017 20:55
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na HONZ4
Lukáš Hornych:3.7.2017 22:16

Já bych to zkusil pomocí souboru. Vždy když by se zapnula nová instance zapsal bych jí do toho souboru jako že je aktivní, a když by se ukončila, soubor by přepsala. No a když by nějaká instance chtěla vypnout počítač, zkontrolovala by pomocí toho souboru, jestli jsou všechny instance ukončené.

Editováno 3.7.2017 22:16
 
Nahoru Odpovědět
3.7.2017 22:16
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:3.7.2017 22:22

Podívej se na metodu Process.GetPro­cesses(). Pokud program bude chtít vypnout počítač, vytáhne se seznam všech aktivních procesů. Pokud tam najde proces jiné instance aplikace, tak jenom ukončí sama sebe a nic neudělá. A tak to pude dál a dál, dokud se nebude chtít ukončit poslední program. Opět vytáhne seznam procesů, ale zjistí, že tam už je jenom jeden, což je on sám, a tak vypne počítač.

https://msdn.microsoft.com/…vs.110).aspx

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
3.7.2017 22:22
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
HONZ4
Člen
Avatar
Odpovídá na Adam Ježek
HONZ4:4.7.2017 0:03

GetProcesses jsem dříve používal pro detekci duplicitních procesů, ale z nějakého důvodu to nefungovalo příliš spolehlivě. Ale pro tento problém by se asi dalo přimhouřit oko..
Ještě zbývá předat nějak zprávu o změně stavu checkboxu "po dokončení vypnout pc" ostatním instancím, řešit to zápisem do nějakého souboru se mě moc nelíbí a do zasílání zpráv se mi taky moc nechce... Nechci aby se aplikace zdržovala úkoly navíc.
Nemáte ještě nějaký nápad ?

 
Nahoru Odpovědět
4.7.2017 0:03
Avatar
Nahoru Odpovědět
4.7.2017 0:27
https://www.facebook.com/peasantsandcastles/
Avatar
STP
Člen
Avatar
STP:4.7.2017 7:25
string singleInstance = @"testovaciApp@";

bool result;
var mutex = new System.Threading.Mutex(true, singleInstance, out result);
if (!result)
{
        //Istance běží - pc nevypiname.
}
Nahoru Odpovědět
4.7.2017 7:25
Když umřít, tak online!!!
Avatar
HONZ4
Člen
Avatar
HONZ4:5.7.2017 18:51

Díky moc všem za reakce.

 
Nahoru Odpovědět
5.7.2017 18:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.