从共享文件夹运行桌面应用程序时出现UnauthorizedAccessException

时间:2010-04-22 13:25:19

标签: .net windows-vista unauthorizedaccessexcepti

我使用VS 2008创建了一个桌面应用程序。

当我在本地运行时,一切正常。

我分享了我的输出文件夹(不允许网络用户更改我的文件) 并从我们内联网上的另一台Vista计算机上运行我的exe。

运行共享exe时,我在尝试读取文件时收到“System.UnauthorizedAccessException”。

如何授予读取文件的权限? 我应该更改代码吗? 我应该授予Vista计算机上的application \文件夹的权限吗?如何?

注意:

  • 我不使用ClickOnce。应该使用xcopy分发应用程序。

  • 我的应用程序目标框架是“.Net Framework 2.0”

  • 在Vista计算机上,“controlPanel | UninstallOrChangePrograms”它说它有“Microsoft .Net Framework 3.5 SP1”

  • 我也尝试映射文件夹驱动器,但是遇到了同样的错误,只是现在fileName是“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 :(得分:0)

找到了它。

根据MSDN,[FileStream构造函数(String,FileMode)]

。 。 。对于没有FileAccess参数的构造函数,

  • 如果mode参数设置为附加,则写入是默认访问权限。
  • 否则,访问权限设置为 ReadWrite

- >我的代码使用了默认值,ioStream.CanWrite:= True,我对共享文件夹没有 Write 权限。

所以我添加了 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) 

答案 1 :(得分:0)

.NET Framework 3.5 SP1 开始,您可以从网络共享运行应用程序。您无需定位它,只需安装它即可。

参考