UnauthorizedAccessException quando si esegue un'applicazione desktop dalla cartella condivisa
-
01-10-2019 - |
Domanda
Ho creato un'applicazione desktop utilizzando VS 2008.
Quando eseguo localmente, tutto funziona bene.
ho condiviso la mia cartella di output (SENZA consentendo agli utenti di rete di modificare i file) e corse il mio exe da un altro computer Vista sulla nostra intranet.
Quando si esegue l'exe condiviso, ricevo "System.UnauthorizedAccessException" quando si tenta di leggere un file.
Come faccio a dare il permesso per consentire la lettura del file? Devo cambiare il codice? Dovrei concedere l'autorizzazione per l'applicazione \ cartella sul computer Vista? come?
Note:
-
Io non uso ClickOnce. l'applicazione dovrebbe essere distribuito utilizzando xcopy.
-
Il mio framework di destinazione applicazione è" .Net Framework 2.0"
-
Nel computer Vista, "Pannello di controllo | UninstallOrChangePrograms" si dice che ha "Microsoft .Net Framework 3.5 SP1"
-
Ho anche provato a connettere l'unità della cartella, ma ha ottenuto gli stessi errori, solo che ora il nome del file è "T: \ my.ocx"
' ---------------------------------------------- ------------------------
' il mio codice:
Dim src As String = mcGlobals.cmcFiles.mcGetFileNameOcx ()
Dim iostream come nuovo System.IO.FileStream (src, IO.FileMode.Open)' ---------------------------------------------- ------------------------
Funzione Pubblica Shared mcGetFileNameOcx () As String
' ---------------------------------------------- ------------------------
Dim dirName As String = Application.StartupPath & "\" Dim sFiles() As String = System.IO.Directory.GetFiles(dirName, "*.ocx") Dim i As Integer For i = 0 To UBound(sFiles) Debug.WriteLine(System.IO.Path.GetFullPath(sFiles(i))) ' if found any - return the first: Return System.IO.Path.GetFullPath(sFiles(i)) Next Return "" End Function
' ---------------------------------------------- ------------------------
' L'eccezione che ricevo:
System.UnauthorizedAccessException: Access to the path '\\computerName\sharedFolderName\my.ocx' is denied. at System.IO._Error(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(...) at System.IO.FileStream..ctor(...) at System.IO.FileStream..ctor(String path, FileMode mode)
' ---------------------------------------------- ------------------------
Soluzione
trovato.
Secondo MSDN, [FileStream Constructor (String, FileMode)]
. . . Per i costruttori senza un parametro FileAccess,
- Se il parametro è impostato su modalità Append , Scrivi è l'accesso predefinito.
- In caso contrario, l'accesso è impostato su ReadWrite .
-> il mio codice utilizzato di default, con ioStream.CanWrite: = True, e non ho Scrivi l'autorizzazione per la cartella condivisa
così ho aggiunto FileAccess parametro:
new code:
Dim ioStream As New System.IO.FileStream(srcOcx, IO.FileMode.Open, IO.FileAccess.Read)
old code:
Dim ioStream As New System.IO.FileStream(srcOcx, IO.FileMode.Open)
Altri suggerimenti
A partire da .NET Framework 3.5 SP1 si è permesso di eseguire un'applicazione da una condivisione di rete. Non c'è bisogno di indirizzare esso, devi solo di averlo installato.