从共享文件夹运行桌面应用程序时,未授权accessexception
-
01-10-2019 - |
题
我使用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 您可以从网络共享运行应用程序。您不必定位它,只需安装它即可。