我们在asp。net虚拟主机 的网站中用到了多线程技术。但出现问题:
网页主线程对文件有读写权限,可新起的线程却没有权限。
比如用下面的代码 :分别在主线程 和 新起的线程中创建一个文件。执行结果是主线程创建文件成功,而子线程出现操作错误:没有权限创建文件。请问这里面是怎么回事呢?如何才能避免这个情况?谢谢了
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
System.IO.File.WriteAllText(Server.MapPath("/114/b" + DateTime.Now.Millisecond.ToString
()), "dd");
Response.Write(Application["e"]);
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart
(dd));
t.Start();
Response.End();
}
private void dd()
{
try
{
System.IO.File.WriteAllText(Server.MapPath("/114/a" +
DateTime.Now.Millisecond.ToString()), "dd");
}
catch (Exception e)
{
Application["e"] = e.Message+e.HelpLink +e.Source+e.StackTrace+e.TargetSite;
}
}
</script>
尽量不要使用多线程!
这段代码没有问题,我亲自试了下,自建的线程是没有问题的。
问题出在:Server.MapPath("/114/b")上。
因为你的是虚拟主机,Server.MapPath()指向的根目录不是你的虚拟机目录,而是主站的根目录。很显然的,你没有在虚拟主机外写入的权限。
应该使用Server.MapPath("/你的虚拟目录/114/b");
或者Server.MapPath(Request.ApplicationPath + "114/b");
不知道AdjustTokenPrivileges 能否恢复线程权限到主线程权限,楼主可以试试