UnauthorizedAccessException при запуске настольного приложения из общей папки - PullRequest
0 голосов
/ 22 апреля 2010

Я создал настольное приложение, используя VS 2008.

Когда я запускаю его локально, все работает хорошо.

Я поделился своей выходной папкой (БЕЗ разрешения пользователям сети изменять мои файлы) и запустил мой exe с другого компьютера Vista в нашей интрасети.

При запуске общего exe-файла я получаю «System.UnauthorizedAccessException» при попытке прочитать файл.

Как я могу дать разрешение на чтение файла? Должен ли я изменить код? Должен ли я предоставить разрешение папке application \ на компьютере с Vista? как?

Примечания:

  • Я не использую ClickOnce. Приложение должно распространяться с использованием xcopy.

  • Моя целевая среда приложения - ".Net Framework 2.0"

  • На компьютере Vista «controlPanel | UninstallOrChangePrograms» говорится, что у него «Microsoft .Net Framework 3.5 SP1»

  • Я также пытался сопоставить папку диска, но получил те же ошибки, только теперь имя файла "T: \ my.ocx"

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

    'мой код:

    Dim src As String = mcGlobals.cmcFiles.mcGetFileNameOcx ()
    Dim ioStream As New System.IO.FileStream (src, IO.FileMode.Open)

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

    Открытая общая функция 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
    

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

    'Исключение, которое я получаю:

    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)
    

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2010

Начиная с .NET Framework 3.5 SP1 , вам разрешено запускать приложения из общей сетевой папки. Вы не должны нацеливаться на него, вам просто нужно установить его.

Ссылки

0 голосов
/ 25 апреля 2010

нашел это.

Согласно MSDN, [FileStream Constructor (String, FileMode)]

.,,Для конструкторов без параметра FileAccess,

  • , если для параметра режима установлено значение Append , Запись , доступ по умолчанию.
  • В противном случае, доступ установлен на ReadWrite .

-> мой код использовал значение по умолчанию, с ioStream.CanWrite: = True, и у меня нет Запись разрешение для общей папки.

, поэтому я добавил FileAccess параметр:

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