0

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

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

我共享了我的输出文件夹(不允许网络用户更改我的文件)并从我们内部网上的另一台 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() 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)
    

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

4

2 回答 2

0

找到了。

根据 MSDN,[FileStream 构造函数(字符串,文件模式)]

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

  • 如果 mode 参数设置为Append,则Write 是默认访问。
  • 否则,访问权限设置为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) 
于 2010-04-25T11:27:13.263 回答
0

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

参考

于 2010-04-25T11:54:02.990 回答