Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET web服务器上的次文件系统访问权限_C#_Asp.net_.net_Global Asax - Fatal编程技术网

C# 在.NET web服务器上的次文件系统访问权限

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中列出文件,但对于每个文件,

全部,, 我在web服务器的web根目录上有一个~/temp目录。比如说: C:\inetpub\myapp\temp

我在页面的代码隐藏类中有一个方法,可以删除那里的所有文件。一切正常

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应用相同的访问权限?