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

当我在本地运行时,一切都很好。

我共享了我的输出文件夹(不允许网络用户更改文件),然后从Intranet上的另一台Vista计算机运行我的EXE。

运行共享EXE时,我在尝试读取文件时会收到“ system.unauthorizedAccessexception”。

如何允许允许阅读文件?我应该更改代码吗?我应该授予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()为字符串

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

      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)
    

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

有帮助吗?

解决方案

找到了。

根据MSDN的说法,[FILESTREAM构造函数(String,FileMode)

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

  • 如果将模式参数设置为 附加, 是默认访问。
  • 否则,将访问设置为 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) 

其他提示

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

参考

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top