UnauthorizedAccessException lorsque l'application de bureau en cours d'exécution à partir du dossier partagé
-
01-10-2019 - |
Question
Je créé une application de bureau en utilisant VS 2008.
Quand je lance localement, tout fonctionne bien.
Je partageais mon dossier de sortie (sans permettre aux utilisateurs du réseau à modifier mes fichiers) et a couru mon exe depuis un autre ordinateur Vista sur notre intranet.
Lors de l'exécution du exe partagé, je reçois « System.UnauthorizedAccessException » lorsque vous essayez de lire un fichier.
Comment puis-je donner la permission pour permettre la lecture du fichier? Dois-je changer le code? Dois-je accorder l'autorisation à l'application \ dossier sur l'ordinateur Vista? comment?
Notes:
-
Je n'utilise ClickOnce. l'application doit être distribué à l'aide xcopy.
-
Mon cadre cible d'application est » Net Framework 2.0"
-
Sur l'ordinateur Vista, "ControlPanel | UninstallOrChangePrograms" il dit qu'il a "Microsoft .Net Framework 3.5 SP1"
-
J'ai essayé aussi de mapper le lecteur de dossier, mais a obtenu les mêmes erreurs, que maintenant le fichier est « T: \ my.ocx »
» ---------------------------------------------- ------------------------
» mon code:
Dim src As String = mcGlobals.cmcFiles.mcGetFileNameOcx ()
Dim iostream As New System.IO.FileStream (src, IO.FileMode.Open)» ---------------------------------------------- ------------------------
Chaîne partagée Fonction publique mcGetFileNameOcx ()
» ---------------------------------------------- ------------------------
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'exception que je reçois:
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)
» ---------------------------------------------- ------------------------
La solution
trouvé.
Selon MSDN, [FileStream Constructor (String, FileMode)]
. . . Pour les constructeurs sans paramètre FileAccess,
- si le paramètre de mode est réglé sur Append , Ecrire est l'accès par défaut.
- Dans le cas contraire, l'accès est réglé sur ReadWrite .
-> mon code utilisé par défaut, avec ioStream.CanWrite: = True, et je n'ai pas Ecrire autorisation sur le dossier partagé
alors j'ai ajouté FileAccess Paramètre:
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)
Autres conseils
A partir de .NET Framework 3.5 SP1 vous êtes autorisé à exécuter une application à partir d'un partage réseau. Vous ne devez pas avoir le cibler, il vous suffit de l'avoir installé.