【问题标题】:Is there Any way to Run UWP Application with Administrator Rights?有没有办法以管理员权限运行 UWP 应用程序?
【发布时间】:2017-03-21 23:09:28
【问题描述】:

我在 Visual Studio 中使用 Windows 通用平台工具创建了一个应用程序。在此应用程序中,我必须重命名用户选择的文件,但在调试时出现 Permission denied 异常。

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

我已尽我所能进行搜索,但似乎在 Internet 上没有任何可用的解决方案,或者我错过了任何可能解决此问题的查询。

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

代码: (编辑:这是现在工作的代码)

            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 文本框来验证每个和一切都按我的预期进行,如果我不使用 File.Copy,那么每个文件都会像我想要的那样从所选文件夹中列出。但是 File.Copy 出现 Permission Denied 问题 :( 如果我直接使用 File.Move 我会收到 File Not Found Exception 。

有什么方法可以解决这类问题?

【问题讨论】:

  • 如果你也能告诉我解决方案,有人给 -1 吗? :)
  • 您要重命名哪些文件?
  • NineBerry 先生,我正在测试图像文件,但是当用户想要时,任何类型的文件都会被重命名,即文本文件、视频文件等。
  • 显示源代码并添加uwp项目的项目设置

标签: c# uwp


【解决方案1】:

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++;
}

【讨论】:

  • 非常感谢 Laith Sir :D 这行得通 ^_^ 我创建了 StorageFile 对象并使用内置函数对其进行了重命名 :D (是的,先生,我后来注意到重命名方法有效并且我遇到了错误)
猜你喜欢
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多