C# 在.NET web服务器上的次文件系统访问权限
全部,, 我在web服务器的web根目录上有一个~/temp目录。比如说: C:\inetpub\myapp\temp 我在页面的代码隐藏类中有一个方法,可以删除那里的所有文件。一切正常C# 在.NET web服务器上的次文件系统访问权限,c#,asp.net,.net,global-asax,C#,Asp.net,.net,Global Asax,全部,, 我在web服务器的web根目录上有一个~/temp目录。比如说: C:\inetpub\myapp\temp 我在页面的代码隐藏类中有一个方法,可以删除那里的所有文件。一切正常 protected CleanTemp() { // clean all the files in tmp dir Array.Foreach... } 问题在于,如果我在我的Global.aspx中创建一个计时器,尝试以相同的方式执行清除,系统会在temp dir中列出文件,但对于每个文件,
protected CleanTemp() {
// clean all the files in tmp dir
Array.Foreach...
}
问题在于,如果我在我的Global.aspx中创建一个计时器,尝试以相同的方式执行清除,系统会在temp dir中列出文件,但对于每个文件,它都会返回一个异常,说明用户没有正确的访问权限:
[Global.aspx]
void Application_Start(object sender, EventArgs e) {
PhisicalTmpFolder = Server.MapPath(~/temp);
// create new timer
System.Timers.Timer timScheduledTask = new System.Timers.Timer();
timScheduledTask.Interval = 20 * 60 * 1000.0;
timScheduledTask.Enabled = true;
timScheduledTask.Elapsed += new System.Timers.ElapsedEventHandler(timScheduledTask_Elapsed);
}
void timScheduledTask_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
// clean all the files in tmp dir
Array.ForEach(
Directory.GetFiles(PhisicalTmpFolder),
delegate(string path) {
try {
File.Delete(path); i++;
} catch (Exception ex) {
if (_logger != null) _logger.Error(ex.Message, ex);
}
}
);
}
我如何告诉计时器它必须以应用程序的相同访问权限运行
提前谢谢大家,,
Gianpiero我认为您在这里遇到的问题是ASP.NET进程帐户没有相应的权限,并且您启用了用户模拟,因此当在页面请求期间启动操作时,它是在具有权限的请求用户帐户下执行的
尝试授予ASP.NET进程帐户对该目录的权限。我认为您这里的问题是ASP.NET进程帐户没有适当的权限,并且您启用了用户模拟,因此,当在页面请求期间启动操作时,它是在请求用户帐户下执行的,而请求用户帐户没有相应的权限权利
尝试向该目录授予ASP.NET进程帐户权限。检查在应用程序池(通常是网络服务)中配置的用户是否有删除权限。检查在应用程序池(通常是网络服务)中配置的用户是否有权删除它们拥有删除它们的权限。您是否可以在
timScheduledTask\u
方法中使用模拟来更改为具有必要提升权限的标识
有一篇很好的帖子介绍了如何在
try
/finally
块中轻松创建模拟上下文。您能否在timScheduledTask\u
方法中使用模拟来更改具有必要提升权限的标识
有一篇很好的帖子描述了如何在
try
/finally
块中轻松创建模拟上下文。那么,如果您从Global.asax调用CleanTemp,它能工作吗?如果从计时器中调用,它就不起作用了?你的目录是隐藏的吗?如果没有,删除可能会触发应用程序的重新启动。我刚刚在global.asax(无计时器)中进行了测试,收到了相同的错误。所以这不是计时器的问题,而是用户运行global.asax的问题。请记住,我是托管的,不能修改Web服务器上的任何用户。无论如何,通过ftp的目录显示为777(rwxrwxrwx),因此,如果从Global.asax调用CleanTemp,它可以工作吗?如果从计时器中调用,它就不起作用了?你的目录是隐藏的吗?如果没有,删除可能会触发应用程序的重新启动。我刚刚在global.asax(无计时器)中进行了测试,收到了相同的错误。所以这不是计时器的问题,而是用户运行global.asax的问题。请记住,我是托管的,不能修改Web服务器上的任何用户。无论如何,通过ftp的目录显示为777(rwxrwxrwx),我想你已经知道了。但是我没有办法修改访问权限(我是托管的)。有没有办法给global.asax提供与我的web应用程序相同的访问权限?我想你明白了。但是我没有办法修改访问权限(我是托管的)。有没有办法让global.asax拥有与我的web应用相同的访问权限?