2010-06-23 16 views
7

Ho una cartella condivisa di rete mappata a una lettera di unità, accessibile da Esplora risorse, dal prompt dei comandi e dall'applicazione WinForms senza problemi. È anche accessibile dal mio servizio Windows utilizzando un percorso UNC.Impossibile accedere ai file su una condivisione di rete mappata da un servizio Windows

Tuttavia, quando si tenta di accedere a questa posizione di rete utilizzando una lettera di unità mappata dal servizio Windows, l'accesso ha esito negativo. Il servizio Windows è configurato per utilizzare le mie credenziali dell'account di accesso personali, che è lo stesso in tutti i casi precedenti. Sono un amministratore.

Molti siti di clienti utilizzano lettere di unità per le condivisioni di rete e non posso sempre controllarlo e obbligarlo a specificare i percorsi UNC. Devo essere in grado di accedere alle condivisioni di rete utilizzando lettere di unità da un servizio di Windows.

Cosa devo fare per configurare il mio servizio Windows, in modo che possa accedere alle cartelle condivise di rete che sono mappate alle lettere di unità? Il mio servizio Windows è scritto in C#.

risposta

9

spiacenti; you can't access mapped drives from Windows services. Come suggerito da Sheng, è possibile utilizzare un processo di interfaccia utente per ottenere il percorso UNC da un'unità mappata e quindi passare questo al servizio, che deve utilizzare il percorso UNC.

+0

Grazie per l'articolo. Microsoft chiarisce che non si deve accedere alle unità mappate da un servizio Windows. – Elan

+0

L'articolo citato afferma solo che i servizi non devono utilizzare o modificare i mapping di unità, che _non significa che non può essere eseguito.Nell'articolo MS KB, implica anche come tale quando dice: "Pertanto, le unità reindirizzate non possono essere condivise tra processi in esecuzione con account utente diversi." In altre parole, la sessione di accesso e il servizio devono essere in esecuzione con le stesse credenziali. Si può fare. – Garen

+0

@Garen: ogni versione principale di Windows aumenta la separazione tra servizi e codice desktop, per motivi di sicurezza. Ci * sono * modi per costringerlo a lavorare ora. C'erano anche modi per forzarlo su versioni precedenti di Windows che non funzionano più. Non è supportato; dovresti semplicemente creare un prodotto che potrebbe rompersi in una versione futura di Windows. (Sto parlando per esperienza ...) –

4

unità mappate sono per oggetto di sessione. Quindi ogni sessione interattiva ha la propria mappatura e la sessione di servizio ha un'altra mappatura dell'unità. Per ottenere il percorso UNC corretto di un'unità mappata, è necessario chiamare WNetGetConnection nella sessione corretta.

È possibile utilizzare qualsiasi metodo di comunicazione inter-sessione per avviare la richiesta e ottenere il risultato nel servizio, come ad esempio WCF, named pipe, prese, ecc

+0

Grazie mille. Sono stato in grado di convertire la lettera di unità nel percorso UNC utilizzando pinvoke e WNetGetConnection! – Elan

0

hi elan Ho affrontato lo stesso problema nel mio progetto e ho trovato una soluzione

ed è il lavoro previsto seguire i miei passi

    if (api.Docusign_download(strDocuSignUserName, strDocuSignPassword, strDocuSignIntegratorKey, EnvelopeID, Environment.ExpandEnvironmentVariables("%temp%")) == true) 
        { 
         if (m_streamWriter1 != null) 
         { 
          m_streamWriter1.WriteLine(" This envelop id is Downloaded and update the table" + EnvelopeID + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\n"); 
         } 

         fpath1 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '1' + ".pdf"; 
         fpath2 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '2' + ".pdf"; 
         if (System.IO.File.Exists(fpath1)) 
         { 
          fso = new FileSystemObject(); 
          // fso.CopyFile(fileLoc, "\\\\Tech-Pro-01\\D\\", true); i download the file in temp folder and copy file to unc path ur expected work on reverse like access file to unc path he does not work directly but work in in direct access like temp folder to services 
          fso.CopyFile(fpath1, UNC, true); 
          fso.CopyFile(fpath2, UNC, true); 
          fso.DeleteFile(fpath1, true); 
          fso.DeleteFile(fpath2, true); 
          //System.IO.File.Move(fileLoc, fileLocMove); 

im solo utilizzando script di un'applicazione legacy in VB oggetto di sistema di file FSO

1, assicurarsi che l'accesso vostra mappa percorso in IUSER e l'accesso dei servizi di rete consentirà alla macchina fornito mappato 2, aggiungendo il sistema di riferimento di scripting

3, e l'esempio percorso UNC \ computername \ sharedname \ cartella \ filename 4, solo fso.copyfile (uncpath, tempfoler, true) 5, u accedere un file nella cartella Temp egli è l'accesso previsto e lavoro perfetto

la temperatura accesso cartella "C: \ windows \ temp perché proceess può prendere la cartella Temp di Windows solo

speranza u Elan è funzionare perfettamente

grazie e saluti

Jagadeesh Govindaraj Pillai [email protected]

Problemi correlati