asp.net创建的子线程写文件引发拒绝访问错误的解决方法

[ At 9/29/2011 By wukong   0 comments ]

asp.net 创建的子线程有可能在写文件时抛出“拒绝访问错误”的异常,无法正确写入文件内容,通过调试会发现asp.net子线程的用户权限和页面执行主线程的不同,造成拒绝访问错误

目前我找到的解决方法是通过System.Security.Principal.WindowsIdentity.Impersonate方法在子线程里模拟主线程的“windows账户标记”从而获得和主线程相同权限。下面是一段测试代码:

 
  1. protected void Page_Load(object sender, EventArgs e)
  2. {   
  3.     //先获得页面执行的主线程用户信息, 悟空注释,悟空的博客 www.7es.cn    
  4.     System.Security.Principal.WindowsIdentity obj = System.Security.Principal.WindowsIdentity.GetCurrent();
  5.     thread = new Thread(new ParameterizedThreadStart(proc));
  6.     thread.Start(obj);
  7. }
  8.  
  9. void proc(object obj)
  10. {
  11.     System.Security.Principal.WindowsIdentity wi = (System.Security.Principal.WindowsIdentity)obj;
  12.     
  13.     try
  14.     {
  15.         log.Write("test 0 start" + System.Security.Principal.WindowsIdentity.GetCurrent().Name);
  16.     }
  17.     catch (Exception ex)
  18.     {
  19.       System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "dbg.txt"
  20.       "这里可能无法写入日志,会访问错误异常的,只是表示一下此处没有权限写入,后面模拟账号之后才能获得权限");
  21.     }
  22.     
  23.     System.Security.Principal.WindowsIdentity.Impersonate(wi.Token); //模拟一下
  24.     
  25.     System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "dbg.txt"
  26.       "ok, 这里可以写入日志文件");
  27. }

这只是手写的测试代码,可能有出入手误的地方,具体自己根据代码自己修改吧。某些情况下可能还需要web.config里进行一些修改,当然,如果可以配置iis的话,这些问题都不用考虑了,完全可以通过iis配置给更高的权限解决读写文件问题。欢迎有任何疑问的朋友通过我的博客www.7es.cn和我交流沟通相关的问题。

« jquery上传文件插件uploadify按钮中文显示的解决方法access的isnull函数使用方法 »
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By 空空如也 

Copyright 167-2009 www.7es.cn . Some Rights Reserved. Email:iamwgh@msn.com QQ:49556
Friends site:Null