none
Crash processo dovuto a scaricamento dll caricate da rete dopo la disconnessione di un'altra sessione in ambiente Remote Desktop Services (terminal services) su Windows 2008 R2 RRS feed

  • Discussione generale

  • Salve a tutti,
    in Windows 2008 R2 ho incontrato il seguente problema che non si verifica in precedenti versioni di Windows 2008:

    Un applicativo eseguito in una sessione terminal da un drive di rete che carica anche dll a collegamento dinamico dal medesimo percorso si trova ad avere rimosse dalla memoria le dll che aveva caricato da rete in seguito alla disconnessione di un'altra sessione che esegue il medesimo applicativo; la conseguenza è un crash della prima applicazione ancora in esecuzione durante il suo successivo utilizzo oppure alla chiusura della stessa.

    Il problema è piuttosto grave perchè impedisce di utilizzare i servizi terminal per eseguire applicazioni eseguite dal medesimo drive di rete. Infatti l'ultima sessione che si connette, esegue l'applicativo e si disconnette senza prima terminare l'applicativo stesso, induce il crash in tutte le altre sessioni che hanno il medesimo applicativo ancora in esecuzione.

    Il problema si verifica solo se si è nelle seguenti condizioni:
    - Windows Server 2008 R2 base o Service Pack 1 con Remote Desktop Services installati
    - le varie sessioni terminal hanno il medesimo drive di rete mappato sullo stesso percorso UNC
    Il problema non si verifica:
    - su altre versioni di Windows Server 2008 e precedenti
    - se in entrambe le sessioni l'applicazione viene eseguita direttamente da un percorso UNC tipo \\serverName\shareName\pathToApp\Appname.exe


    Per ripetere il problema eseguire i seguenti passi:
    - installare Windows 2008 R2 Standard da una copia scaricata per esempio da http://technet.microsoft.com/en-us/evalcenter/dd459137.aspx
    - dalla sessione dell'Administrator installare i Remote Desktop Services. Da 'Initial Configuration Tasks' fare click su 'Add Role', su 'Server Roles' selezionare 'Remote Desktop Services', su 'Role Services' selezionare 'Remote Desktop Session Host', su 'Authentication Method' selezionare 'Do not require Network Level Authentication', su 'Licensing Mode' selezionare 'Per User', su 'User Groups' aggiungere un utente standard 'UserA', su 'Client Experience' proseguire, installare, accettare il riavvio, riconnettersi ed attendere il completamento dell'installazione.
    - dalla sessione dell'Administrator scaricare ProcessExplorer da http://download.sysinternals.com/Files/ProcessExplorer.zip, espanderlo in una cartella ed eseguirlo. Su 'View' -> 'Select Columns...' selezioniamo 'User Name' e 'Image Path', sulla linguetta 'DLL' selezioniamo 'Path', confermiamo su OK. Premiamo Ctrl-D mer mostrare il pannello sottostante delle DLL ed ordiniamo per path facendo click sull'header della 'Path'.
    - scaricare Microsoft Spy da http://cid-539d62829af123fb.office.live.com/self.aspx/.Public/spyxx.rar ed espandere il contenuto in una cartella 'myShare' che è condivisa in rete.
    - mappiamo il drive di rete Z: sulla condivisione 'myShare', es.: \\serverName\myShare ed eseguiamo Z:\spyxx\spyxx.exe
    - su ProcessExplorer selezioniamo il processo spyxx.exe; vedremo nel pannello sottostante delle dll una serie di dll caricate da rete da un percorso tipo \Device\Mup\serverName\myShare\spyxx\SPYXXHK.DLL
    - apriamo una nuova connessione desktop remoto come utente 'UserA', mappiamo il drive di rete Z: sulla condivisione 'myShare' allo stesso modo come abbiamo fatto per l'Administrator ed eseguiamo Z:\spyxx\spyxx.exe
    - disconnettiamo la sessione dello 'UserA' SENZA chiudere l'applicativo spyxx.exe
    - dalla sessione dell'Administrator, su ProcessExplorer potremo notare che dall'applicativo spyxx.exe sono sparite le seguenti dll che erano caricate da rete: mfc71u.dll, MSVCP71.DLL, msvcr71.dll, spyxxhk.dll
    - a ulteriori conferma, portiamo in primo piano spyxx.exe, da menu selezioniamo Spy -> Processes ed otterremo un crash

    Qualcuno ha già incontrato un problema simile ed ha una soluzione per risolverlo?

    Grazie
    Carlo Marsura

    • Tipo modificato Anca Popa lunedì 23 gennaio 2012 07:52 in attesa di ulteriori aggiornamenti
    lunedì 16 gennaio 2012 16:40

Tutte le risposte

  • Ciao,

    Non sono sicura se la tua richiesta fosse ancora di attualità, intanto vorrei chiederti, per il caso fortunato in cui riesci a trovare la soluzione, di condividerla con la community, in modo che possa essere trovata e utilizzata dagli altri membri che riscontranno scenari simili.

    Se questa problematica è urgente per il tuo lavoro, puoi anche valutare di aprire un incident preso il supporto di Microsoft (ritieni che questo tipo di assistenza potrebbe essere a pagamento).

    Grazie,


    Anca Popa Follow ForumTechNetIt on Twitter

    Versioni di valutazione gratuite dei software Microsoft

    Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto viene fornito “così come è” e non comporta alcuna responsabilità da parte dell'azienda. 

    lunedì 23 gennaio 2012 07:52
  • Ciao Anca,

    credo che il problema sia ancora di attualità perché si riproduce anche su un server aggiornato fino all'ultimo bit ed anche in ambiente virtualizzato (Vmware ESXi 4.1).

    In attesa che Microsoft prenda in considerazione il problema, ho trovato un workaround: si tratta di effettuare la condivisione su uno share di rete tramite DFS e connettere il drive tramite il percorso UNC comprendente il namespace; ecco le istruzioni per installare il DFS:

    Su Server Manager click su 'Aggiungi ruolo', click 'Servizi file', click su 'Avanti', su 'Servizi ruolo' click su 'File server' e 'Spazi dei nomi DFS', su 'Spazi dei nomi DFS' click su 'Avanti' (Crea uno spazio dei nomi ora utilizzando questa procedura guidata , default 'Namespace1'), su 'Tipo di spazio dei nomi' click su 'Avanti' (Spazio dei nomi autonomo), su 'Configurazione dello spazio...' click su 'Aggiungi...', click su 'Sfoglia...', click su 'Mostra cartelle condivise', selezionare la condivisione (es. 'myShare') oppure crearne una al volo usando 'Nuova cartella condivisa...', click su 'OK', 'OK', 'Avanti', 'Installa', 'Chiudi'.

     Dalle varie sessioni terminal mappare il drive di rete su \\serverName\Namespace1\myShare anziché su \\serverName\myShare .

    Mappando il drive in questo modo il problema non appare più.

    Naturalmente ritengo che questa soluzione sia un escamotage in attesa di una correzione da parte di Microsoft.

    Carlo

     

    lunedì 23 gennaio 2012 10:34