有没有办法以管理员权限运行UWP应用程序?

时间:2017-03-21 23:09:28

标签: c# uwp

我在Visual Studio中使用Windows Universal Platform Tools创建了一个应用程序。在这个应用程序中,我必须重命名用户选择的文件,但我在调试时收到Permission denied异常。

包装后&在机器上安装我没有选择以管理员身份运行它。

我尽可能多地搜索,但似乎互联网上似乎没有任何解决方案,或者我错过了任何可能解决此问题的查询。

我无法在清单文件中看到与存储相关的任何类型的权限:(

代码: (编辑:现在正在使用Code)

            FolderPicker folderPicker = new FolderPicker();
        folderPicker.SuggestedStartLocation = PickerLocationId.Desktop;
        folderPicker.FileTypeFilter.Add("*");
        folderPicker.ViewMode = PickerViewMode.List;
        StorageFolder folderPicked = await folderPicker.PickSingleFolderAsync();

        if (folderPicked != null)
        {

            t_output.Text = folderPicked.Path.ToString();
            StringBuilder outputText = new StringBuilder();
            IReadOnlyList<StorageFile> fileList =
            await folderPicked.GetFilesAsync();
            int i=0;
             foreach (StorageFile file in fileList)
            {
                outputText.Append(file.Name + "\n");
                StorageFile fs = await folderPicked.GetFileAsync(file.Name);
                await fs.RenameAsync("tanitani0" + i + ".jpg");
                i++;

            }

我正在使用t_output.Text TextBox验证每个&amp;一切都按照我的预期进行,如果我不使用File.Copy,那么每个文件都会从我想要的所选文件夹中列出。但是使用File.Copy获取Permission Denied问题:(如果我直接使用File.Move,我将获得File Not Found Exception。

解决此类问题的方法是什么?

1 个答案:

答案 0 :(得分:3)

UWP中存在一些文件系统限制,您刚刚碰到其中一个。通过访问该文件夹,您必须继续使用该StorageFolder实例进行修改。

要创建文件的副本,请使用folderPicked.CreateFileAsync(path)并使用从该方法返回的StorageFile来复制流数据。但由于您可以访问目录中的各个文件,因此可以利用StorageFile接口并异步执行操作。以下是允许的方法列表:

https://docs.microsoft.com/en-us/uwp/api/windows.storage.storagefile

使用File.Copy(...)只能在隔离的存储/应用程序数据目录中使用。仅仅因为您有folderPicked并不意味着File.Copy(...)有权访问。

代码示例:

foreach (StorageFile file in fileList)
{
    outputText.Append(file.Name + "\n");
    int i = 0;

    await file.CopyAsync(pickedFolder, "tani" + i + ".jpg");
    i++;
}

在旁注中,您的int i值将始终为零。只需确保它在循环外部继续递增。

int i = 0;

foreach (StorageFile file in fileList)
{
    outputText.Append(file.Name + "\n");        
    await file.CopyAsync(pickedFolder, "tani" + i + ".jpg");
    i++;
}