我在 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
谢谢!