网络位置中的MusicLibrary会抛出UnauthorizedAccessException

时间:2017-09-20 13:15:33

标签: c# uwp

我的UWP应用程序访问了位于网络驱动器上的MusicLibrary KnownFolder(\\或已映射)。

如果我直接从Windows编辑音乐库中的文件我没有问题,但是当我的应用程序尝试编辑文件(在这种情况下为标签)时,它会抛出UnauthorizedAccessException。如果我将MusicLibrary交换到本地文件夹,一切都很笨拙。

我选择了音乐库和专用网络功能。

之前有没有人碰到这样的事情?

更新1: 不相关

更新2(更新):

请参阅下面的示例,这个示例有点简洁地为我复制了这个问题。为方便起见,我把它卡在了一个按钮上。显然,这与MediaPlayer有关,我当时没有意识到。

当MediaLibrary设置为本地目录时,例如C:\ Music,它可以正常工作。当设置为远程位置时,例如X:\ HomeServerShares \ Music它将引发异常。

Git:https://github.com/Rekrii/UWPMusicLibAccessDeniedExample

private async void Button_Click(object sender, RoutedEventArgs e)
        {
            //Get a list of files from the music library
            IReadOnlyList<StorageFile> files = await KnownFolders.MusicLibrary.GetFilesAsync();
            //Select random file from the music library
            //using GetFileFromPathAsync as per comment below
            StorageFile infoFile = 
                 await StorageFile.GetFileFromPathAsync(
                     files[new Random().Next(0, files.Count - 1)].Path);

            //Create a MediaSource and add it to a MediaPlaybackList
            MediaSource source = MediaSource.CreateFromStorageFile(infoFile);
            MediaPlaybackList list = new MediaPlaybackList();
            list.Items.Add(new MediaPlaybackItem(source));

            //Create a MediaPlayer and add the MediaPlaybackList to it
            MediaPlayer player = new MediaPlayer();
            player.Source = list;
            //'mediaPlayer' was created in xaml: <MediaPlayerElement x:Name="mediaPlayer"/>
            mediaPlayer.SetMediaPlayer(player);

            //Get the music properties of the audio file
            MusicProperties musicProperties = await infoFile.Properties.GetMusicPropertiesAsync();
            //Edit them (so UWP will attempt to edit the file)
            musicProperties.Title = "woo";
            //Save the properties...
            //When using C:\etc as a MusicLibrary, this will work fine
            //When using a mapped location say X:\etc this save will thorw access denied
            await musicProperties.SavePropertiesAsync();
        }

我已确认访问网络驱动器的用户具有FullControl权限,是文件夹所有者,并且可以从资源管理器编辑文件。

我还可以使用C#重命名文件以演示正确的访问权限,因为重命名应该与编辑大致相似。 &#39;路径&#39;我使用的是X:\ etc的形式,其中X:\是映射的字母。

错误可以归结为SavePropertiesAsync来电吗?

1 个答案:

答案 0 :(得分:0)

enter image description here

通用命名约定(UNC)是Microsoft Windows中常用于访问共享网络文件夹的命名系统。有关详细信息,请参阅File access permissions

这是我的Package.appxmanifest:

  <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="UWP_how_to_show_image_from_a_network.App">
    <uap:VisualElements DisplayName="UWP how to show image from a network" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="UWP how to show image from a network" BackgroundColor="transparent">
      <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
      </uap:DefaultTile>
      <uap:SplashScreen Image="Assets\SplashScreen.png" />
    </uap:VisualElements>
    <Extensions>
      <uap:Extension Category="windows.fileTypeAssociation">
        <uap:FileTypeAssociation Name="mymusictest">
          <uap:DisplayName>MyMusicTest</uap:DisplayName>
          <uap:SupportedFileTypes>
            <uap:FileType>.mp3</uap:FileType>
          </uap:SupportedFileTypes>
        </uap:FileTypeAssociation>
      </uap:Extension>
    </Extensions>
  </Application>
</Applications>
<Capabilities>
  <Capability Name="internetClient" />
  <Capability Name="internetClientServer" />
  <Capability Name="privateNetworkClientServer" />
  <uap:Capability Name="enterpriseAuthentication" />
</Capabilities>

它不会抛出UnauthorizedAccessException,我们可以通过StorageFolder.GetFolderFromPathAsync方法获取文件夹。