System.UnauthorizedAccessException: 拒绝访问临时目录。以其运行 XmlSerializer 的身份“IIS APPPOOL\DefaultAppPool”没有足够的

本文介绍了解决IIS7中因应用池身份权限不足导致的系统拒绝访问临时目录的问题。通过更改DefaultAppPool的应用程序池默认设置为本地系统,并重启应用池,成功解决了XmlSerializer在编译过程中遇到的权限问题。

错误信息如下:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

System.UnauthorizedAccessException: 拒绝访问临时目录。以其运行 XmlSerializer 的身份“IIS APPPOOL\DefaultAppPool”没有足够的权限访问临时目录。CodeDom 将使用此进程用于进行编译的用户帐户,因此如果用户对系统临时目录没有访问权限,则将无法编译。使用 Path.GetTempPath() API 可找到临时目录位置。
   在 System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
   在 System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
   在 System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
   在 System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type)
   在 System.Web.Services.Protocols.XmlReturn.GetInitializers(LogicalMethodInfo[] methodInfos)
   在 System.Web.Services.Protocols.XmlReturnWriter.GetInitializers(LogicalMethodInfo[] methodInfos)
   在 System.Web.Services.Protocols.MimeFormatter.GetInitializers(Type type, LogicalMethodInfo[] methodInfos)
   在 System.Web.Services.Protocols.HttpServerType..ctor(Type type)
   在 System.Web.Services.Protocols.HttpServerProtocol.Initialize()
   在 System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


环境:WIN7, IIS 7, 64BIT


解决方案:

 开始->运行-> inetmgr -> 在IIS信息管理器中,找到 应用程序池 -> DefaultAppPool -> 右键 设置应用程序池默认设置 -> 标识:LocalSystem (本地系统)  -> 确定. 重启 应用程序池。


效果图

pic-1:


pic-2:



参考:

http://www.cnblogs.com/sunxi/p/3356719.html


(结束)

在 C# 中,`System.UnauthorizedAccessException` 异常通常表示当前进程没有足够的权限访问指定的路径或文件。针对路径 `D:\SaveData` 出现的访问被拒绝问题,可能的原因和解决方法如下: ### 1. 检查文件或目录权限 确保运行程序的用户账户对 `D:\SaveData` 目录具有读写权限。可以通过以下方式修改目录权限: - 右键点击 `D:\SaveData` 文件夹,选择“属性”。 - 在“安全”选项卡中,检查当前用户是否具有“读取”和“写入”权限。 - 如果没有相应权限,点击“编辑”按钮,添加所需权限。 如果程序需要写入权限,则必须确保目标路径允许写入操作,否则会抛出 `UnauthorizedAccessException` [^3]。 ### 2. 确保路径是目标文件而非目录 如果使用 `File.Move` 或 `File.Copy` 方法时,第二个参数是一个目录而非完整文件路径,则会引发异常。例如: ```csharp File.Move("source.txt", "D:\\SaveData"); ``` 上述代码中,`"D:\\SaveData"` 是一个目录而非目标文件路径,因此会抛出 `UnauthorizedAccessException`,因为目标路径必须是一个完整的文件路径,如 `"D:\\SaveData\\target.txt"` [^1]。 正确写法如下: ```csharp File.Move("source.txt", "D:\\SaveData\\target.txt"); ``` ### 3. 以管理员权限运行程序 如果程序需要访问受保护的目录(如系统目录或受限制的文件夹),可以尝试以管理员身份运行应用程序: - 在 Visual Studio 中调试时,右键点击 Visual Studio 图标,选择“以管理员身份运行”。 - 如果是独立运行的 `.exe` 文件,右键点击程序图标,选择“以管理员身份运行”。 这样可以提升程序的访问权限,避免因权限不足导致的 `UnauthorizedAccessException` [^3]。 ### 4. 检查文件是否被其他进程占用 如果目标文件已经被其他程序打开或锁定,也会导致访问被拒绝。可以通过以下方式排查: - 检查是否在资源管理器或其他程序中打开了目标文件。 - 使用资源监视工具(如 Process Explorer)查看是否有进程锁定了目标文件。 - 在代码中确保正确关闭文件流,例如使用 `using` 语句确保 `FileStream` 正确释放资源: ```csharp using (FileStream fs = new FileStream("D:\\SaveData\\file.txt", FileMode.Open)) { // 读取或写入文件 } ``` ### 5. Android 平台特殊处理 如果是在 .NET MAUI Android 项目中遇到此问题,需要在 `AndroidManifest.xml` 中添加外部存储权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 这样可以确保应用程序在访问外部存储路径时不会因权限不足而抛出 `UnauthorizedAccessException` [^4]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值