【问题标题】:Access is denied - UWP full trust process访问被拒绝 - UWP 完全信任过程
【发布时间】:2022-01-20 17:07:46
【问题描述】:

我有一个 UWP C++/WinRT 应用和一个 C++/WinRT 控制台应用程序。


UWP 应用程序使用FullTrustProcessLauncher 启动控制台应用程序,并且控制台应用程序应该在系统上启动任意.exe 文件,例如cmd.exe.


控制台应用程序的完整代码在这里:

#include "pch.h"
#include <iostream>

int main()
{
    winrt::init_apartment();

    try
    {
        winrt::Windows::System::ProcessLauncher::RunToCompletionAsync(L"cmd.exe", L"").get();
    }
    catch (const winrt::hresult_error& err)
    {
        std::cout << winrt::to_string(err.message()) << std::endl;
    }

    std::cin.get();
}

pch.h 包括winrt/Windows.Foundation 以及winrt/Windows.System.h


UWP 应用可以成功启动控制台应用,但控制台应用似乎无法启动.exe 文件,带有E_ACCESSDENIED


我认为控制台应用程序应该能够启动任意 .exe 文件是一个完全信任的进程,我错了吗?

如果没有,我该如何修复Access is denied 错误?

【问题讨论】:

    标签: c++ uwp process c++-winrt


    【解决方案1】:

    并非所有 Windows 运行时 API 在 Win32 上下文中都受支持 “经典”桌面应用程序,因为它们仅用于通用 Windows 平台 (UWP) 的“AppContainer”上下文。

    对于 Win32 桌面应用程序,最好的解决方案是使用ShellExecuteEx。此函数在需要时处理用户帐户控制 (UAC) 提升,如果调用者和目标不同,CreateProcess 将失败。

    // Get working directory from executable path.
    wchar_t szDirectory[MAX_PATH] = {};
    wcscpy_s( szDirectory, szExePath );
    PathRemoveFileSpec( szDirectory );
    
    SHELLEXECUTEINFOW info = {};
    info.cbSize = sizeof( info );
    info.lpVerb = L"open";
    info.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOASYNC | SEE_MASK_NOCLOSEPROCESS;
    info.lpFile = szExePath;
    info.lpParameters = szExeArgs;
    info.lpDirectory = szDirectory;
    info.nShow = SW_SHOW;
    if( !ShellExecuteExW( &info ) )
        // Error
    

    此时您检查 info.hProcess 句柄上的等待,或者只是检查目标程序是否已完成。

    如果您需要退出代码,请使用:

    DWORD exitCode;
    GetExitCodeProcess( info.hProcess, &exitCode );
    

    确保不要通过调用CloseHandle( info.hProcess ); 泄漏句柄。如果您不关心等待或退出代码,请不要使用SEE_MASK_NOCLOSEPROCESS。如果您希望它完全异步,请不要使用SEE_MASK_NOASYNC

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 2019-06-28
      • 2021-09-18
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多