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)
    

    ' ---------------------------------------------- ------------------------

È stato utile?

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.

Riferimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top