win32程序通过命令行调用uwp程序

//枚举所有uwp程序,并判断指定显示名称的uwp程序是否存在

//displayname  uwp程序的显示名称    containername uwp程序的PackageFamilyName,也就是结构体中的appContainerName

typedef struct _INET_FIREWALL_APP_CONTAINER
{
    SID *appContainerSid;
    SID *userSid;
    LPWSTR appContainerName;
    LPWSTR displayName;
    LPWSTR description;
    INET_FIREWALL_AC_CAPABILITIES capabilities;
    INET_FIREWALL_AC_BINARIES binaries;
    LPWSTR workingDirectory;
    LPWSTR packageFullName;
} INET_FIREWALL_APP_CONTAINER, *PINET_FIREWALL_APP_CONTAINER;

BOOL IsExistSpecificUWP(LPTSTR displayname, std::wstring& containername)
{
    BOOL bRet = FALSE;
    HMODULE FirewallAPIModule;
    FirewallAPIModule = (LoadLibrary(L"FirewallAPI.dll"));

    auto EnumAppContainersProc = pNetworkIsolationEnumAppContainers(GetProcAddress(FirewallAPIModule, "NetworkIsolationEnumAppContainers"));
    auto FreeAppContainersProc = pNetworkIsolationFreeAppContainers(GetProcAddress(FirewallAPIModule, "NetworkIsolationFreeAppContainers"));
    DWORD pdwNumPublicAppCs = 0;
    PINET_FIREWALL_APP_CONTAINER ppPublicAppCs = NULL;
    if (nullptr == EnumAppContainersProc || nullptr == FreeAppContainersProc)
    {
        return bRet;
    }

    HRESULT Hr = EnumAppContainersProc(0, &pdwNumPublicAppCs, &ppPublicAppCs);
    if (Hr != ERROR_SUCCESS)
    {
        return bRet;
    }

    for (int i = 0; i < pdwNumPublicAppCs; i++)
    {
        auto appContainer = ppPublicAppCs[i];
        if (_tcscmp(appContainer.displayName, displayname) == 0)
        {
            containername = appContainer.appContainerName;
            LOG_INFO(L"exist uwp containername=%s", containername.c_str());
            bRet = TRUE;
        }
    }

    FreeAppContainersProc(ppPublicAppCs);
    FreeLibrary(FirewallAPIModule);
    return bRet;
}

通过cmd命令调起该uwp程序(注意叹号前后的内容)

explorer.exe shell:appsFolder\microsoft.windowscommunicationsapps_8wekyb3d8bbwe!microsoft.windowslive.mail

                                                         ^Here is the PackageFamilyName                                 !^Here is the app ID

 

打开资源管理器,输入shell:appsFolder可以查看本机的所有uwp程序

你可能感兴趣的:(UWP)