2010-02-18 5 views
6

Utilizzo di C# WMI Avvio di un exe su un altro computer e questo exe avvia un altro exe utilizzando la classe C# Process. L'ultimo exe tenta di chiamare Directory.CreateDirectory utilizzando un percorso di rete (noto anche come \\\\comp1\d$\dir\). Directory.CreateDirectory genera questa eccezione:C# WMI esegue un exe su un PC remoto che esegue quindi un altro exe sullo stesso PC che chiama Directory.CreateDirectory su un percorso di rete e non riesce

Access to the path '\\\\blah\blah\blah' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity) 
    at System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity) 

Se corro il terzo exe direttamente in una console sul computer che esiste su questa eccezione non viene generata e tutto funziona bene.

Le impostazioni di sicurezza per la cartella in cui viene creata la directory ha "Tutti" le autorizzazioni complete.

Come posso risolvere questo problema?

+2

Ti sei assicurato che le impostazioni di sicurezza della cartella di rete condivisa ti consentano di leggere/scrivere i privilegi? – Aaron

+0

Per quanto posso dire ... – jestro

+0

qualche soluzione al riguardo? – Kiquenet

risposta

1

Come detto Aaron, Windows Security quota ha due componenti il ​​primo è la sicurezza della Azione stesso. Il secondo è la sicurezza dei file e delle cartelle in quella condivisione.

Entrambi devono consentire l'accesso alla directory di creazione affinché funzioni.

È inoltre necessario sapere che il gruppo EVERYONE include account di computer di dominio, account di sistema integrato, utenti di dominio, guest e utenti autenticati.

Ciò significa che la prima cosa che si vuole fare è vedere quale utente sta effettivamente eseguendo. Se è in esecuzione con l'account macchina E non fa parte di un dominio, sarà necessario consentire l'accesso all'account della macchina alla condivisione e al file system.

2

Ricorda inoltre che quando si avvia un'applicazione tramite WMI, esiste un terzo livello di diritti. Ad esempio, se invochi un metodo su un oggetto WMI esistente, non può delegare i diritti del chiamante, o anche i diritti dell'host host, ma avrà un Preside vuoto. Questo potrebbe accadere a te.

Passare a Gestione computer e, in Servizi e applicazioni, fare clic con il tasto destro del mouse sul nodo Controllo WMI e selezionare Proprietà. Vai alla scheda Sicurezza, quindi accedi allo spazio dei nomi WMI corretto (molto probabilmente root \ CIMV2) e assicurati che anche l'utente che stai utilizzando abbia i diritti appropriati.

+0

Se avessi aggiunto tutti a root \ CIMV2 e gli avessi dato i permessi completi, questo avrebbe fatto il trucco? – jestro

+1

Possibilmente. Non sono esattamente sicuro di cosa sta succedendo qui. Volevo solo rendervi conto che quando si esegue un'azione avviata tramite WMI, si dispone effettivamente di un terzo set di autorizzazioni da gestire. – Nick

+0

Giusto, grazie per l'avviso. È una situazione dolorosa di sicuro. – jestro

Problemi correlati