我在远程Windows客户端(使用C#2.0的WinForm应用程序)上收到一个奇怪的错误
错误消息:拒绝访问路径'c:\ ApplicationFolder'。
堆栈跟踪:在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath) at System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY_ATTRIBUTES secAttrs,String msgPath,Boolean bFromProxy)
我说我知道我不应该直接将应用程序文件夹放在c:\文件夹下。这是一个我无法控制的旧应用程序。
答案 0 :(得分:6)
可能归结为原因您不应该将应用程序文件夹放在那里:标准用户默认情况下没有写访问权限。由于大多数人以管理员身份运行Windows,因此通常不会出现问题,但如果您尝试在最近更新安全策略的企业环境中安装,则会突然出现严重问题。
您是否检查过该文件夹的权限?
答案 1 :(得分:5)
您可能正试图在只读文件上获得写访问权。
答案 2 :(得分:3)
一个问题和一个建议。
消息中报告的文件路径是否与文件夹的名称相匹配 - 字母大小写,空格,下划线,重音符号,所有内容?
为什么呢?我见过古怪的情况,这引起了一个问题。
建议:使用ProcessMonitor(来自SysInternals,现在是Microsoft的一部分)来监视对该文件夹的访问,您将看到有关该错误的更多详细信息 - 如果您看到的错误报告不是特别有用准确。
答案 3 :(得分:0)
应用程序是否至少从配置文件/注册表/数据库表中加载“应用程序文件夹”?如果是这样,当您将该值更改为“我的文档”文件夹中的某些内容时会发生什么?
我看到你添加了用户是管理员并拥有完全管理员权限所以我必须明白 - 文件夹是否存在于代码认为应该存在的位置?
答案 4 :(得分:0)
同意过程监控有用,节省了我一天中的几个小时。如果将Path.Combine的args翻转,那么我最终试图写入目录而不是文件。在调试中没有任何提示,进程mon显示出来。
答案 5 :(得分:0)
System.IO.FileStream.Init
听起来像是在打开文件,而不是文件夹。文件是什么?
您确定文件存在吗?它不是由另一个应用程序打开的?你想写信给文件吗?是锁定还是只读?
我们需要查看打开文件的代码。
答案 6 :(得分:0)
在您的应用程序中创建和嵌入清单文件以获取应用程序的管理权限
Executable: IsUserAdmin.exe
Manifest:IsUserAdmin.exe.manifest
Sample application manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
此处requireAdministrator说您的应用程序需要管理员权限 当用户启动您的应用时,这将导致确认对话。