C# windows service a spouštění procesů s potlačením GUI – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# windows service a spouštění procesů s potlačením GUI – .NET – Fórum – Programujte.comC# windows service a spouštění procesů s potlačením GUI – .NET – Fórum – Programujte.com

 

Mirek
~ Anonymní uživatel
62 příspěvků
20. 6. 2010   #1
-
0
-

Zdravím všechny,

potřeboval bych pomoct s následující záludností:

mám v C# naprogramovanou službu (windows service), která má za úkol instalovat na počítač software třetích stran. Problém je v tom, že instalátory některých softwarů mají tendenci v některých výjimečných situacích zobrazit nějaké GUI, přestože jsou spuštěny s volbou "/VERYSILENT" apod. (tedy za normálních okolností se instalují bez GUI).

Ta "výjimečná situace" může vypadat třeba tak, že se instaluje doplněk do Firefoxu - pokud Firefox neběží, doplněk se správně nainstaluje a žádné GUI nezobrazí. Pokud ale Firefox běží, zobrazí okno, že FF má být nejprve ukončen.

Problém je v tom, že proces spuštěný z Windows service nemá právo žádné GUI zobrazit a když se o to pokusí, dojde k té nejhorší možné variantě reakce - proces se ani neukončí s chybovou hláškou, ani nezhavaruje, ale prostě zamrzne.

Asi pochopíte, že je nereálné vychytat všechny podmínky, za kterých by instalátor mohl chtít nějaké GUI zobrazit, a předejít jim. Potřeboval bych teda nějak docílit, aby se proces, který chce GUI zobrazit, zachoval jakýmkoli jiným způsobem, než aby zamrzl.

V programování pro Windows nejsem zběhlý, normálně se věnuju spíš unixům, takže za jakoukoli radu nebo postrčení správným směrem bych byl velmi vděčný...

(podotýkám, že povolit službě "interakci s desktopem" není řešení, protože instalace se může spustit i v době, kdy nikdo není přihlášený, nehledě na bezpečnostní riziko a obtěžování uživatelů hláškami, kterým nebudou rozumět)

Pokud neexistuje žádný regulerní způsob, jak toho dosáhnout, byl bych vděčný i za tipy na nějaké hacky, které by v dané situaci byly funkční... (ten nejhloupější, který mě napadá, je dát procesu "časový limit", za který se buď nainstaluje, nebo bude sestřelen... - ale doufám, že by mohl existovat i nějaký chytřejší způsob typu zahákování nějakého systémového volání nebo tak něco)

předem díky moc za jakékoliv rady, popostrčení, inspiraci

Mirek

Nahlásit jako SPAM
IP: 90.178.132.–
Mirek
~ Anonymní uživatel
62 příspěvků
20. 6. 2010   #2
-
0
-

Ještě doplnění:

Co jsem tak vygooglil, tak Windows Vista a 7 mají pro interaktivní služby vyčleněný "samostatný desktop" (Session 0). Služba UI0Detect pak umí detekovat okna, která se tam objeví a upozornit na ně uživatele.

Jak to funguje na Windows XP, jsem se nějak nedozvěděl. (když služba nemá povoleno interagovat s desktopem a přesto se o to snaží, tak prostě zamrzne).

Šlo by teda udělat nějaký podobný hack jako má UI0Detect? - tj. přihákovat se na událost vytvoření okna a v případě, že se jedná o proces suštěný mojí službou, ho zabít...?? Nějak takhle:

this DLL provides just a standard run-of-the-mill systemwide hook routine, whose callback will be notified for each new window on the desktop
http://www.alex-ionescu.com/?p=60

Pokud by to šlo, můžete někdo prosím naznačit, jak na to? Jak jsem řekl - s programováním pro Windows bohužel nemám zkušenosti...

díky

Nahlásit jako SPAM
IP: 90.178.132.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 42 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý