Meziprocesová komunikace (a např. dočasné adresáře)
Meziprocesová komunikace (a např. dočasné adresáře)
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%
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.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
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)Jan Rysavy wrote:Máte na mysli Encrypt plugin?
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.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
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.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).
Velmi jednoducho... Jedna sa o prepinanie medzi pouzivatelmi bez odhlasenia. "Fast User Switching"Jan Rysavy wrote:Jak přesně spustíme Salamandera na více plochách?
http://support.microsoft.com/kb/279765
Nefunguje v domenovom prostredi ActiveDirectory.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
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.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.
Kontroloval jsem; o tento případ se mi nejedná, i když by pravděpodobně vyústil ve stejný problém.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?
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.)Jan Rysavy wrote:Pokud jde o "Fast User Switching", jak se zaloguji na více ploch pod jedním uživatelem?
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.
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.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.
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.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
Š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.
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));
...
Tak ako to popisal kolega... Run As...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
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
-
- Posts: 593
- Joined: 09 Dec 2005, 17:30
- Location: a step further
- Contact:
Tohle je vytrzeny z jinyho threadu, ne?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.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.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.
Jiri {x2} Cincura
-
- Posts: 593
- Joined: 09 Dec 2005, 17:30
- Location: a step further
- Contact:
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
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.
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.
-
- ALTAP Staff
- Posts: 5231
- Joined: 08 Dec 2005, 06:34
- Location: Novy Bor, Czech Republic
- Contact:
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
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