UnauthorizedAccessException lorsque l'application de bureau en cours d'exécution à partir du dossier partagé

StackOverflow https://stackoverflow.com/questions/2691159

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)
    

    » ---------------------------------------------- ------------------------

Était-ce utile?

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é.

Références

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top