如何从“Windows 8 App”DLL访问文件?

时间:2013-12-28 07:16:58

标签: c# powershell visual-studio-2012 dll storagefile

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

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

我真正没有得到的是:当我在运行相同操作系统的另一台计算机(Windows Server 2012)上使用相同的DLL尝试此操作时,我会对任何文件夹(包括“我的图片”文件夹)获取“拒绝访问”。 / p>

所以,我的问题是:如何访问第二台计算机上的“我的图片”文件夹中的文件(就像我在第一台计算机上所做的那样),如果使用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

谢谢!

0 个答案:

没有答案