当我尝试写入应用程序安装目录中的文件夹中的文件时,出现“访问被拒绝”的消息。
有趣的是,我可以正常读取文件。然后,当我测试对其进行写入时,我得到了错误。
我使用NOTEPAD在此处创建了sample.txt文件。
目标:
这样做的原因是我的Windows窗体应用程序可以与UWP应用程序交换文件。我需要在Windows应用程序可以找到的文件夹中进行交换;是固定的(恒定)。我虽然也许会安装uwp安装文件夹。
此应用进入了我们的产品,而不是进入“商店”-没有外部连接。理想情况下,我想完全访问Windows 10。
这是相同的代码,就像...
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>
答案 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安装文件夹。
因此,您应该考虑将数据写入其他地方。