Windows Azure Exception: "Access to the path XYZ.exe is denied."



我使用Windows Azure的本地存储来存储临时文件。在那里,我调用一个。exe文件来转换同一本地存储文件夹中的其他几个文件。问题是我总是得到异常"访问路径XYZ.exe被拒绝"。

我应该提到以下几点:-我使用的是worker角色-在服务定义文件

中设置

并尝试为我正在访问的文件夹添加权限:

    public static void AddPermission(string absoluteFolderPath)
    {
        DirectoryInfo myDirectoryInfo = new DirectoryInfo(absoluteFolderPath);
        DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
        myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(
        "NETWORK SERVICE",
        FileSystemRights.FullControl,
        AccessControlType.Allow));
        myDirectoryInfo.SetAccessControl(myDirectorySecurity);
    }

更新:我现在试着用这段代码:

     public static void FixPermissions()
    {
        var tempDirectory = RoleEnvironment.GetLocalResource("localStorage").RootPath;
        Helper.addPermission(tempDirectory);
        var dir = new DirectoryInfo(tempDirectory);
        foreach (var d in dir.GetDirectories())
            Helper.addPermission(d.FullName);
    }
    private  static void addPermission(string path)
    {
        FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", 
                                                                                     FileSystemRights.FullControl,
                                                                                     InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                                                                     PropagationFlags.None, AccessControlType.Allow);
        DirectoryInfo directoryInfo = new DirectoryInfo(path);
        DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
        directorySecurity.AddAccessRule(everyoneFileSystemAccessRule);
        directoryInfo.SetAccessControl(directorySecurity);
    }

我得到了一个非常奇怪的页面行为。我仍然得到错误,但有时有些文件被ffmpeg.exe文件转换。

有人能帮我一下吗?

谢谢你。

解决方案:

所以问题似乎是我在本地存储中运行。exe文件,因此有给定的安全问题。将。exe放入应用程序并直接引用解决了我的问题。

谢谢你的帮助。

默认情况下,您的worker角色很可能没有足够的权限来允许更改Azure文件夹上的访问控制列表。

有两个可能的选项:

  • 最好:在启动时运行脚本设置权限。详细信息请访问MSDN: http://msdn.microsoft.com/en-us/library/gg456327.aspx。你需要设置executionContext="elevated"

    编写脚本本身的最佳方式是通过Powershell。这里有一个例子:http://weblogs.thinktecture.com/cweyer/2011/01/fixing-windows-azure-sdk-13-full-iis-diagnostics-and-tracing-bug-with-a-startup-task-a-grain-of-salt.html。或者,编写一个控制台应用程序来做同样的事情。

  • 最简单,但不太安全:在你的OnStart方法中设置安全性,并提升运行你的整个worker角色:在你的服务定义文件中包含

<WebRole name="WebApplication2">
  <Runtime executionContext="elevated" />
  <Sites>

但是,我真的不建议这样做,因为对于在公共云上运行的东西来说,这是一个可怕的安全漏洞。

最新更新