Meziprocesová komunikace (a např. dočasné adresáře)

Zde můžete volně diskutovat o programu Altap Salamander. Ptejte se, odpovídejte a vyjadřujte své názory. Prosíme, nevkládejte sem hlášení problémů či návrhy na nové funkce.
User avatar
Ether
Posts: 1471
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Meziprocesová komunikace (a např. dočasné adresáře)

Post by Ether »

Zjistil jsem, že - nepříliš překvapivě - meziprocesová komunikace mezi jednotlivými instacemi AS nefunguje, pokud jsou tyto instance spuštěny pod různými uživately, ani když jsou spuštěny na jiných plochách, třebaže pod stejným uživatelem.

Projeví se to např. když mám spuštěnou jednu instanci pod uživatelem A na jeho ploše a ta si vytvoří dočasný adresář v TEMPu(*). Druhou instanci uživatele A spustím na ploše uživatele U, ta si přečte obsah TEMPu, podívá se okolo, jestli existují další instance; nenajde je, tak vyhlásí, že daný dočasný adresář je pozůstatkem už mrtvé instance a nabídne smazání.

Zajímal by mne váš názor na to z pohledu vývojáře, jestli jste se s tím pokoušeli vypořádat, ne/existuje nějaké řešení, nebo jste k něčemu takovému vůbec nedošli, ...

*) TEMP = adresář pro ukládání dočasných dat určený proměnnými %TMP% a %TEMP%
Ελληνικά rulez.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Máte na mysli Encrypt plugin? Ten zobrazí dotaz v případě více instancí vždy (v podstatě chyba).

Poznámka: různí uživatelé standardně nesdílí TEMP adresář, každý má vlastní. Potom ke konfliktu nedochází.
User avatar
Ether
Posts: 1471
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Post by Ether »

Jan Rysavy wrote:Máte na mysli Encrypt plugin?
Ne, mluvím o dočasných adresářích např. pro rozbalení souboru pro prohlížení z archivu. Standardně AS nabízí po startu možnost jakékoli zbylé dočasné adresáře vymazat v případě, že nevidí žádné další instance.(1) Problém v případě, že to jsou instance různých uživatelů, není, protože mají různé cesty k TEMPu (jak jste zmínil). Ovšem problém nastává, když jsou obě instance jednoho uživatele, ale přesto se nemůžou vidět.(2)

Nežádám řešení, pouze mne zajímá váš názor a zkušenosti ohledně tohoto.

1) Reprodukovatelné např. postupem: spustím AS1, prohlédnu soubor z archivu (tím se vytvoří dočasný adresář), zabiju AS1; spustím další2 a ta se zeptá, jestli smazat dočasné adresáře, odmítnu; spustím další3 a ta už se neptá, protože vidí druhou2 instanci a usoudí, že dočasné adresáře jsou její.

2) Jak jsem již psal v prvním postu, této situace lze dosáhnout, pokud jsou tyto instance spuštěny na různých plochách (s předpokladem, že je zapnutý FUS).
Ελληνικά rulez.
User avatar
SelfMan
Posts: 1144
Joined: 05 Apr 2006, 20:51
Contact:

Post by SelfMan »

Je mozne ze systemova premenna TEMP ukazuje inde ako do
%USERPROFILE%\LOCALS~1\Temp ???
naprikad C:\TEMP a je tym padom je tento TEMP zdielany?
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

ether wrote:2) Jak jsem již psal v prvním postu, této situace lze dosáhnout, pokud jsou tyto instance spuštěny na různých plochách (s předpokladem, že je zapnutý FUS).
Jak přesně spustíme Salamandera na více plochách? Přiznávám, že o této oblasti nic netuším, máme pouze zkušenost s provozem Windows na dvou monitorech, ale virtuální desktopy známe jen z Unixu.
User avatar
SelfMan
Posts: 1144
Joined: 05 Apr 2006, 20:51
Contact:

Post by SelfMan »

Jan Rysavy wrote:Jak přesně spustíme Salamandera na více plochách?
Velmi jednoducho... Jedna sa o prepinanie medzi pouzivatelmi bez odhlasenia. "Fast User Switching"
http://support.microsoft.com/kb/279765

Nefunguje v domenovom prostredi ActiveDirectory.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Pokud jde o "Fast User Switching", jak se zaloguji na více ploch pod jedním uživatelem?
ether wrote:ani když jsou spuštěny na jiných plochách, třebaže pod stejným uživatelem
User avatar
Ether
Posts: 1471
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Post by Ether »

Jan Rysavy wrote:Jak přesně spustíme Salamandera na více plochách? Přiznávám, že o této oblasti nic netuším, máme pouze zkušenost s provozem Windows na dvou monitorech, ale virtuální desktopy známe jen z Unixu.
Desktopy z Linuxů, jak je asi myslíte, jsou něco jiného. Tam jde o jednoduché skrývání/zobrazování oken v závislosti na jejich přiřazení k virtuální ploše a na tom, která je právě aktivní. Z hlediska programů je to - pokud vím - velmi podobné například minimalizaci.
SelfMan wrote:Je mozne ze systemova premenna TEMP ukazuje inde ako do
%USERPROFILE%\LOCALS~1\Temp ???
naprikad C:\TEMP a je tym padom je tento TEMP zdielany?
Kontroloval jsem; o tento případ se mi nejedná, i když by pravděpodobně vyústil ve stejný problém.
Jan Rysavy wrote:Pokud jde o "Fast User Switching", jak se zaloguji na více ploch pod jedním uživatelem?
Pokud vím, více ploch jednoho uživatele na jednom počítači vytvořit nejde. Jde o spolupráci s tzv. Sekundárním přihlašováním (služba seclogon), tedy funkcí Spustit jako... Nespouštím tedy dvě plochy stejného uživatele, ale dvě různé plochy a pod nimi dva Salamandery stejného uživatele.(BTW s tímto souvisí i "vzdálené plochy"; viz sala source.)
cincura.net wrote:Dotazy na povoleni/zamitnuti bezi v samotnem "desktopu" a bezny SW tam nema pravo cokoli udelat. Nicmene pokud je user blazen a nainstaluje nejakou services apod., ktera bude mit vyssi prava nez je nutne, muze i UAC obejit. Neni to lek na blbost, ale na spatny SW.
cincura.net wrote:Aby elevace procesu nebyla jen "klikaci kravina", je cely proces dotazu na elevaci provaden na jinem desktopu (kdyz obrazovka pred dotazem ztmavne, to co je "pod" ni, neni aktualni stav plochy, ale snapshot), tak aby nejaka aplikace nemohla tento dialog odstrelit. Stejne tak, vse co je elevovano bezi na jinem desktopu (opet kvuli bezpecnosti). Takze kdyz nekdo spusti AS jako admin, je naprosto v poradku, ze nektere Drag'n'Drop operace nejdou. Je to proste jiny desktop (i kdyz to neni videt) a neni tedy kam dany objekt dropnout.
Obávám se, že v oblasti Windows je nedostatek použitelných a jasných termínů; také jsem už v souvislosti s UAC elevací narazil na pojem 'desktop'/'plocha' a věřím, že to označuje tu samou věc, kterou jsem měl na mysli. Možná by byl vhodný termín relace či session, ale nechtěl jsem použít nesprávné pojmenování. Pokud vynechám záležitost elevací a zůstanu u XP a FUS, je každá "plocha" charakterizována svým shellem (správcem oken; výchozí je explorer.exe) a také většinou svým winlogon.exe.

Podrobný postup pro demonstraci:
1) Přihlásím se jako Administrator a spustím instanci AS1. Podívám se na soubor v archivu a tuto instanci1 nechám běžet. Výsledkem je dočasný adresář v adminském TEMPu (třeba SAL721.tmp).
2) Přehlásím se (díky FUS) na uživatele Ether a pomocí funkce 'Spustit jako...' si spustím další instanci AS2 jako admin. Ta přebírá prostředí admina, včetně proměnných určujících cestu k TEMPu. Porozhlédne se po dalších instancích, ale jelikož žádné nevidí (běží na jiné ploše), nabídne smazání dočasného adresáře, který našla. Ovšem tento dočasný adresář patří předchozí instanci1, a existuje možnost, že je ještě používán. Smazání zamítnu.
3) Spustím další instanci3 jako admin, opět na ploše Ethera. Ta se zase porozhlédne, taky vidí dočasný adresář, ale jeho smazání nenabídne, protože si všimla běžící instance2.
Ελληνικά rulez.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Špica, teď už problém chápu, mrkneme se na to. Díky za trpělivost :)
Pouze pro zajímavost přikládám současný kód pro detekci souběhu více Salamanderů.
V popsaném případě zjevně selže a běžící instanci nenajde.

Code: Select all

const char *TL_FMO_MUTEX_NAME = "TLServantSalamanderFMOMutex";

...

//---  pokusime se pripojit na FMO-mutex - zaroven test jestli uz nejaky Salamander bezi
  FMOMutex = NOHANDLES(OpenMutex(MUTEX_ALL_ACCESS, FALSE, TL_FMO_MUTEX_NAME));
  if (FMOMutex == NULL)  // jsme prvni Salamander 1.6 beta 2 nebo novejsi
  {
    FirstInstance_1_6_beta2_or_later = TRUE;

//---  vytvoreni systemovych objektu pro komunikaci, zabereme FMO
    FMOMutex = NOHANDLES(CreateMutex(NULL, TRUE, TL_FMO_MUTEX_NAME));

...

User avatar
SelfMan
Posts: 1144
Joined: 05 Apr 2006, 20:51
Contact:

Post by SelfMan »

Jan Rysavy wrote:Pokud jde o "Fast User Switching", jak se zaloguji na více ploch pod jedním uživatelem?
ether wrote:ani když jsou spuštěny na jiných plochách, třebaže pod stejným uživatelem
Tak ako to popisal kolega... Run As...
Aj ked doslova na inu session sa da prihlasit na Windows 2003 Server
Mozne je totiz pracovat na konzole a samostatnej session.
mststc -console /v:server
mststc /v:server
cincura.net
Posts: 593
Joined: 09 Dec 2005, 17:30
Location: a step further
Contact:

Post by cincura.net »

ether wrote:
cincura.net wrote:Dotazy na povoleni/zamitnuti bezi v samotnem "desktopu" a bezny SW tam nema pravo cokoli udelat. Nicmene pokud je user blazen a nainstaluje nejakou services apod., ktera bude mit vyssi prava nez je nutne, muze i UAC obejit. Neni to lek na blbost, ale na spatny SW.
cincura.net wrote:Aby elevace procesu nebyla jen "klikaci kravina", je cely proces dotazu na elevaci provaden na jinem desktopu (kdyz obrazovka pred dotazem ztmavne, to co je "pod" ni, neni aktualni stav plochy, ale snapshot), tak aby nejaka aplikace nemohla tento dialog odstrelit. Stejne tak, vse co je elevovano bezi na jinem desktopu (opet kvuli bezpecnosti). Takze kdyz nekdo spusti AS jako admin, je naprosto v poradku, ze nektere Drag'n'Drop operace nejdou. Je to proste jiny desktop (i kdyz to neni videt) a neni tedy kam dany objekt dropnout.
Obávám se, že v oblasti Windows je nedostatek použitelných a jasných termínů; také jsem už v souvislosti s UAC elevací narazil na pojem 'desktop'/'plocha' a věřím, že to označuje tu samou věc, kterou jsem měl na mysli. Možná by byl vhodný termín relace či session, ale nechtěl jsem použít nesprávné pojmenování. Pokud vynechám záležitost elevací a zůstanu u XP a FUS, je každá "plocha" charakterizována svým shellem (správcem oken; výchozí je explorer.exe) a také většinou svým winlogon.exe.
Tohle je vytrzeny z jinyho threadu, ne?
Jiri {x2} Cincura
User avatar
Ether
Posts: 1471
Joined: 10 May 2007, 16:08
Location: Czech Republic
Contact:

Post by Ether »

@cincura.net] Jasně, to vidíš, ne? :D Šlo mi o konkrétní citace s použitím termínu desktop/plocha. BTW posílal jsem ti autorizačku na ICQ, došla ti?
Ελληνικά rulez.
cincura.net
Posts: 593
Joined: 09 Dec 2005, 17:30
Location: a step further
Contact:

Post by cincura.net »

ether wrote:@cincura.net] Jasně, to vidíš, ne? :D Šlo mi o konkrétní citace s použitím termínu desktop/plocha.
Me zmatlo, ze jsem to nevidel v tom threadu.
ether wrote: BTW posílal jsem ti autorizačku na ICQ, došla ti?
Ne.
Jiri {x2} Cincura
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Během adaptace Salamandera pro Terminal Services (a spojené Fast User Switching, Remote Desktop, RunAs) jsem narazil na pěkný článek popisující virtualizaci kernel objektů pomocí namespaces. Pro zájemce:

The kernel object namespace and Win32, part 1
The kernel object namespace and Win32, part 2
The kernel object namespace and Win32, part 3

Děkujeme za upozornění na nedostatek, Terminal Services a Remote Desktop během vývoje Salamandera nepoužíváme, což je zjevně chyba.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Problém bude vyřešen od Altap Salamander 2.52 beta 1. Společně s ním několik dalších problémů kolem synchronizačních objektů a jejich práv, napříč celým Salamanderem.

Další čtení pro zájemce:
http://forums.microsoft.com/msdn/ShowPo ... 6&SiteID=1
http://www.codeguru.com/cpp/w-p/win32/t ... .php/c4545
Post Reply