0

我在 Visual Studio Express 2012 for Windows 8 中编写了一个 DLL。它只是一个 DLL,所以没有应用程序清单指定功能或类似的东西。在 DLL 中,我调用 StorageFile.GetFileFromPathAsync()。我从 PowerShell 脚本调用 DLL。

当我使用该功能访问“我的图片”文件夹中的文件时,它工作正常。当我尝试访问我的用户文件夹中的文件时,我得到拒绝访问。

我真正不明白的是:当我在另一台运行相同操作系统(Windows Server 2012)的计算机上尝试使用相同的 DLL 时,我对任何文件夹都拒绝访问,包括我的图片文件夹。

所以,我的问题是:如何访问第二台计算机上“我的图片”文件夹中的文件(就像我在第一台计算机上所做的那样),如果使用 DLL 无法做到这一点,那么它是如何在第一台电脑?

更多细节:

这是DLL中的确切代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Foundation;
using Windows.System.UserProfile;

namespace ExactFerret
{
    public class Windows8LockScreen
    {
        public static void SetBackground(string Path)
        {
            SetBackgroundTask(Path).GetAwaiter().GetResult();
        }

        private async static Task SetBackgroundTask(string FilePath)
        {
            StorageFile File = await StorageFile.GetFileFromPathAsync(FilePath);
            await LockScreen.SetImageFileAsync(File);
        }
    }
}

这是我在 PowerShell 中调用 DLL 的方式:

Add-Type -Path .\Windows8.dll
[ExactFerret.Windows8LockScreen]::SetBackground('C:\Users\jigglypuff\Exact Ferret\Pictures\$ef$test.jpg')

这是我收到的错误消息:

Exception calling "SetBackground" with "1" argument(s): "Access is denied.
(Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"
At line:1 char:1
+ [ExactFerret.Windows8LockScreen]::SetBackground('C:\Users\jigglypuff\Exact
Ferre ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : UnauthorizedAccessException

谢谢!

4

0 回答 0