Windows 8 CreateFile2在Windows 8中返回拒绝访问错误

Windows 8 CreateFile2在Windows 8中返回拒绝访问错误,windows-8,windows-runtime,visual-studio-2012,Windows 8,Windows Runtime,Visual Studio 2012,我编写了以下代码行以打开InstalledFolder目录下的文件: Platform::String^ locationPath = Platform::String::Concat(Package::Current->InstalledLocation->Path, "\\Assets\\Logo.png"); CREATEFILE2_EXTENDED_PARAMETERS extendedParams = {0}; extendedParams.dwSize = sizeof

我编写了以下代码行以打开InstalledFolder目录下的文件:

Platform::String^ locationPath = Platform::String::Concat(Package::Current->InstalledLocation->Path, "\\Assets\\Logo.png");

CREATEFILE2_EXTENDED_PARAMETERS extendedParams = {0};
extendedParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
extendedParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
extendedParams.dwFileFlags = FILE_FLAG_SEQUENTIAL_SCAN;
extendedParams.dwSecurityQosFlags = SECURITY_ANONYMOUS;
extendedParams.lpSecurityAttributes = nullptr;
extendedParams.hTemplateFile = nullptr;

Wrappers::FileHandle file(
    CreateFile2(
        locationPath->Data(),
        GENERIC_READ,
        0,
        OPEN_EXISTING,
        &extendedParams
        )
    );

DWORD e = GetLastError();
if (file.Get() == INVALID_HANDLE_VALUE)
{
    throw ref new Platform::FailureException();
}
CreateFile2返回拒绝访问错误。谁能帮帮我吗

正如JP Alioto所建议的,我已经尝试使用WinRT文件I/O,如下所示

    create_task(StorageFile::GetFileFromApplicationUriAsync(ref new Windows::Foundation::Uri("ms-appx:///Assets/Logo.png")))
    .then([=](StorageFile^ f)
    {
        auto p = create_task(f->OpenAsync(FileAccessMode::Read));
        p.wait();
    });
我仍然在p.wait()处遇到以下错误:

向认为无效参数为致命参数的函数传递了无效参数


谢谢,

您正在通过
dwShareMode
0
。的文档说明此值

防止其他进程在请求删除、读取或写入访问权限时打开文件或设备。仅当应用程序具有文件或目录的写访问权限时,才授予对该文件或目录的独占访问权限


您没有对包中的文件的写入权限,这就是为什么会出现“拒绝访问”错误的原因。您需要将共享模式设置为
FILE\u share\u READ

WinRT应用程序在对文件系统的访问受到严格限制的沙箱中运行。你对此无能为力。但我应该能够读取部署文件夹下的文件。我错过什么了吗?就是这样。我在Windows8RC中编写了代码,它在那里工作。现在在RTM中,它不起作用。在文件共享模式下,它工作得非常好。谢谢。我不再安装RC,但是如果我不得不猜测的话,我会猜测在调试之前发生的部署没有正确设置包根权限,并且在实际部署时(例如,通过存储)可能会失败。不过,这是一个疯狂的猜测。