首页 新闻 赞助 找找看

asp.net中主线程和子线程间的权限有什么区别,能不能让子线程拥有主线程一样的权限

0
悬赏园豆:60 [已关闭问题]

我们在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>

 

问题补充: 感谢两位的回答 Vons:谢谢您亲自测试。不过我测试文件确实是放到网站根目录下了,而不是网站的虚拟目录中,所以没有您所说的这种路径错误的问题。而且这种情况确实只出现在虚拟主机环境中,本地和独立服务器都没问题,不知道虚拟主机有什么特殊设置,让子线程的权限降低了。 我咨询过虚拟主机系统的开发人员,他们说没对这个采取什么措施,而是怀疑杀毒软件禁止了我的子线程写文件,这更让我纳闷了。
aspx1的主页 aspx1 | 初学一级 | 园豆:65
提问于:2010-03-19 09:22
< >
分享
其他回答(2)
0

尽量不要使用多线程!

高天蒲 | 园豆:35 (初学一级) | 2010-03-19 12:53
0

这段代码没有问题,我亲自试了下,自建的线程是没有问题的。

问题出在:Server.MapPath("/114/b")上。

因为你的是虚拟主机,Server.MapPath()指向的根目录不是你的虚拟机目录,而是主站的根目录。很显然的,你没有在虚拟主机外写入的权限。

应该使用Server.MapPath("/你的虚拟目录/114/b");

或者Server.MapPath(Request.ApplicationPath + "114/b");

vons | 园豆:1033 (小虾三级) | 2010-03-19 13:45
0
不知道AdjustTokenPrivileges 能否恢复线程权限到主线程权限,楼主可以试试
未未 | 园豆:202 (菜鸟二级) | 2013-01-30 17:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册