我有一个ASP.NET应用程序。 基本上交付流程就是这个:
我的问题是,当我尝试打开网站时,我有一个未经授权的访问错误。 似乎文件需要为用户“ IIS_WPG ”设置权限。
我没有权力更改IIS配置,因此我必须手动更改每个文件的权限。每次我替换文件时,权限都会被删除,我需要再次设置它们。
所以我有两个问题:
答案 0 :(得分:7)
@Jeff Fritz 哎哟... 你的建议是正确的解决方案,但参数是......危险的:)。
在开发计算机上,我以管理员身份登录,并尝试使用cmd建议。
因此,经过一些测试,正确的命令是:
cacls [full folder path] /T /E /G IIS_WPG:F
答案 1 :(得分:4)
您需要在Windows中运行CACLS程序以授予文件和文件夹的权限。从Nant,您可以使用EXEC任务执行此操作。
尝试标记块,如:
<exec program="cacls">
<arg value="*" />
<arg value="/G IIS_WPG:F" />
</exec>
答案 2 :(得分:3)
我们最后用一些相当简单的代码编写了我们自己的任务:
[TaskName("addusertodir")]
public class AddUserToDirectorySecurity : Task
{
[TaskAttribute("dir", Required=true)]
public string DirPath { get; set; }
[TaskAttribute("user", Required=true)]
public string UserName { get; set; }
protected override void ExecuteTask()
{
FileSystemAccessRule theRule1 = new FileSystemAccessRule(UserName, FileSystemRights.ListDirectory, AccessControlType.Allow);
FileSystemAccessRule theRule2 = new FileSystemAccessRule(UserName, FileSystemRights.ReadAndExecute, AccessControlType.Allow);
FileSystemAccessRule theRule3 = new FileSystemAccessRule(UserName, FileSystemRights.Read, AccessControlType.Allow);
DirectorySecurity theDirSecurity = new DirectorySecurity();
theDirSecurity.AddAccessRule(theRule1);
theDirSecurity.AddAccessRule(theRule2);
theDirSecurity.AddAccessRule(theRule3);
Directory.SetAccessControl(DirPath, theDirSecurity);
}
}
然后你可以编写一个加载自定义任务并执行的nant脚本:
<loadtasks>
<fileset>
<include name="MyTask.dll"/>
</fileset>
</loadtasks>
<addusertodir dir="MyDir" user="IIS_WPG"/>
显然,这可以针对您的某些规则进行修改,或者如果您愿意,甚至可以在任务中对其进行参数化。我们更喜欢使用exec任务,因为它让我们可以更好地控制正在应用的权限。
答案 3 :(得分:2)
CACLS现已弃用。这是使用ICACLS的版本,替代。
我们说我们有以下内容:
${paths.myprogram.inetpub}
${upload.foldername}
${iis.upload.user}
${iis.user.permissionlevel}
根据这些假设,我们的任务是:
<exec program="icacls">
<arg value="${path::combine(paths.myprogram.inetpub, upload.foldername)}" />
<arg value="/grant" />
<arg value="${iis.upload.user}:${iis.user.permissionlevel}" />
</exec>
希望这有帮助!