UWP写入InstalledLocation获取访问被拒绝

时间:2019-02-05 22:05:23

标签: c# visual-studio uwp

当我尝试写入应用程序安装目录中的文件夹中的文件时,出现“访问被拒绝”的消息。

有趣的是,我可以正常读取文件。然后,当我测试对其进行写入时,我得到了错误。

我使用NOTEPAD在此处创建了sample.txt文件。

目标:

这样做的原因是我的Windows窗体应用程序可以与UWP应用程序交换文件。我需要在Windows应用程序可以找到的文件夹中进行交换;是固定的(恒定)。我虽然也许会安装uwp安装文件夹。

此应用进入了我们的产品,而不是进入“商店”-没有外部连接。理想情况下,我想完全访问Windows 10。

这是我的UWP C#测试代码。 enter image description here

这是相同的代码,就像...

   StorageFolder mobile_upload_StorageFolder=null;

StorageFolder app_installedLocation_StorageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;

string mobile_folder_name =               "FOR_MOBILE_UPLOAD";
 mobile_upload_StorageFolder = await app_installedLocation_StorageFolder.CreateFolderAsync(mobile_folder_name, CreationCollisionOption.OpenIfExists  );
Windows.Storage.StorageFile sampleFile = await mobile_upload_StorageFolder.GetFileAsync("sample.txt");

string text = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);
Debug.WriteLine( "text: " +  text );
 await Windows.Storage.FileIO.WriteTextAsync(sampleFile, "WRITTEN BY UWP");

我尝试修改清单以启用broadFileSystemAccess,但出现以下错误...……。

    <?xml version="1.0" encoding="utf-8"?>
<Package xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp uap5">
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp uap5 rescap">

    <Identity Name="Microsoft.SDKSamples.CameraFrames.CS" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="1.0.0.0" />
  <mp:PhoneIdentity PhoneProductId="2344b9de-5071-42a6-8873-7fdeb38d53dd" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
  <Properties>
    <DisplayName>Camera Frames C# Sample</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Assets\StoreLogo-sdk.png</Logo>
  </Properties>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.15063.0" MaxVersionTested="10.0.17134.0" />
  </Dependencies>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="CameraFrames.App">
      <uap:VisualElements DisplayName="MOVANO System Hub Camera  interface" Square150x150Logo="Assets\SquareTile-sdk.png" Square44x44Logo="Assets\SmallTile-sdk.png" Description="Camera Frames C# Sample" BackgroundColor="#00b2f0">
        <uap:SplashScreen Image="Assets\Splash-sdk.png" />
        <uap:DefaultTile>
          <uap:ShowNameOnTiles>
            <uap:ShowOn Tile="square150x150Logo" />
          </uap:ShowNameOnTiles>
        </uap:DefaultTile>
      </uap:VisualElements>
    </Application>
  </Applications>
  <Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />  CAUSES "the 'name' attribute is not valid"
    <Capability Name="privateNetworkClientServer" />
    <Capability Name="internetClientServer" />
    <DeviceCapability Name="microphone" />
    <DeviceCapability Name="webcam" />
  </Capabilities>
</Package>

2 个答案:

答案 0 :(得分:4)

这是设计使然。安装位置受写保护,以确保安装的完整性并允许增量更新以及全新卸载。

您应该改为写入ApplicationData。
https://docs.microsoft.com/en-us/windows/uwp/design/app-settings/store-and-retrieve-app-data

答案 1 :(得分:1)

这没什么好笑的,这是每个操作系统(至少是Windows,macOS,iOS,Android等每个主要操作系统)的工作方式。当然,在某些情况下,如果您是管理员,有时在某些操作系统上就有权写入每个文件夹,有时甚至还具有一些其他权限,但是基本上,即使在比UWP受限制的环境(例如WPF或macOS)下,用户也无法做到这一点。

如果用户有权访问该文件夹,则可以使用某些文件系统选择器来请求权限。您还可以在清单中要求broadFileSystemAccess,并且可以访问用户可以访问的所有文件夹。但是问题仍然存在,因为普通用户如果没有一些其他分配的权限就无法访问UWP安装文件夹。

因此,您应该考虑将数据写入其他地方。