UnauthorizedAccessException beim Ausführen von Desktop-Anwendung aus dem freigegebenen Ordner
-
01-10-2019 - |
Frage
Ich habe eine Desktop-Anwendung unter Verwendung von VS 2008.
Wenn ich es lokal ausgeführt, die alle gut funktioniert.
Ich teilte meine Ausgabeordner (ohne dass Netzwerkbenutzer Dateien ändern) und lief meine exe von einem anderen Vista-Computer in unserem Intranet.
Wenn die gemeinsame exe ausgeführt wird, erhalte ich „System.UnauthorizedAccessException“, wenn eine Datei zu lesen versuchen.
Wie kann ich die Erlaubnis geben, damit die Datei zu lesen? Soll ich den Code ändern? Soll ich die Erlaubnis erteilen die Anwendung \ Ordner auf dem Computer Vista? wie?
Weitere Informationen:
-
Ich benutze nicht Clickonce. Die Anwendung sollte mit xcopy verteilt werden.
-
Meine Anwendung Zielframework ist“.NET Framework 2.0"
-
Auf dem Vista-Computer: "Controlpanel | UninstallOrChangePrograms" es sagt, es hat "Microsoft .Net Framework 3.5 SP1"
-
Ich habe auch versucht, das Ordner-Laufwerk abzubilden, bekam aber die gleichen Fehler, erst jetzt der Dateiname ist „T: \ my.ocx“
‘---------------------------------------------- ------------------------
‘mein ??Code:
Dim src As String = mcGlobals.cmcFiles.mcGetFileNameOcx ()
Dim Iostream A New System.IO.FileStream (src, IO.FileMode.Open)‘---------------------------------------------- ------------------------
öffentliche Geteilt Funktion 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
‘---------------------------------------------- ------------------------
‘Die Ausnahme, die ich erhalten:
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)
‘---------------------------------------------- ------------------------
Lösung
habe es gefunden.
Laut MSDN, [Filestream-Konstruktor (String, Filemode)]
. . . Für Konstrukteure ohne Fileaccess Parameter,
- , wenn der Modus-Parameter auf anhängen , Schreiben ist der Standardzugang.
- Andernfalls wird der Zugriff auf Readwrite .
-> mein Code verwendet, um die standardmäßig mit ioStream.CanWrite: = True, und ich habe nicht Schreiben die Erlaubnis für den freigegebenen Ordner
so habe ich Fileaccess Parameter:
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)
Andere Tipps
Beginnend mit .NET Framework 3.5 SP1 Sie erlaubt eine Anwendung von einer Netzwerkfreigabe ausgeführt werden. Sie tun es nicht Ziel haben, die Sie gerade haben müssen installiert sein.