uwp - GetProductInfo() 在 UWP 应用程序中给出异常
问题描述
我正在使用来自Kernel32.dll的 GetProductInfo()
代码示例:
[DllImport("kernel32.dll", SetLastError = false)]
static extern bool GetProductInfo(
int dwOSMajorVersion,
int dwOSMinorVersion,
int dwSpMajorVersion,
int dwSpMinorVersion,
out int pdwReturnedProductType);
但是当我尝试在运行时调用这个方法时,我得到一个例外说,
ExeptionMessage:“来自此方法的未解析的 P/Invoke 方法 'GetProductInfo!kernel32.dll'。请在构建警告中查找此方法以获取更多详细信息。”
构建警告:MCG:警告 MCG0007:方法“GetProductInfo”的未解析 P/Invoke 方法“Kernel32.dll!GetProductInfo”。调用此方法会在运行时抛出异常。请确保 P/Invoke 指向 UWP 应用程序中允许的 Windows API,或作为包一部分的本机 DLL。如果由于某种原因您的 P/Invoke 不满足这些要求,请使用 [DllImport(ExactSpelling=true) 表示您了解使用非 UWP API 的含义。
但是如果我在我的项目中手动包含“Kernel32.dll”一切正常。谁能解释一下到底是什么问题。
解决方案
但是如果我在我的项目中手动包含“Kernel32.dll”一切正常。谁能解释一下到底是什么问题。
简而言之,该GetProductInfo
方法在 UWP 中不可用。UWP 中并非支持所有 win32 API。Windows 10 通用 Windows 平台 (UWP) 应用只能使用 Win32 和 COM API 的子集。请参阅UWP 应用的 Win32 和 COM API。
您在项目中手动包含“Kernel32.dll”。实际上,您将这个 dll 包含在您的应用程序包中。它似乎在您的测试环境中工作,但是当您将应用程序发布到 Windows 商店时,您的包将无法通过 WACK。Windows 应用认证工具包允许你的应用仅使用 Win32 和 COM API 的这个子集。
推荐阅读
- c# - Entityframework > 按键获取跟踪的实体(不同的参考)
- android-studio - 如何在 android studio arctic fox 中增加 RAM 分配的内存?
- java - Docker中的SpringBoot + Postgres:在docker-compose上:无法初始化JPA EntityManagerFactory:无法加载类
- java - 如何在 Netbeans 的 Maven 项目中将图像添加到 JFrame?
- ansible - 从寄存器 stdout_lines 输出中创建修改列表
- google-cloud-platform - Google Cloud Logging 中缺少 Cloud Run 服务
- python - 如何从字典中获取特定值
- python - python:为什么它不打印
- java - 从不同片段调用片段函数时出现 NullPointerException
- apache-spark - 如何在 Spark-YARN 上设置每个任务的最大允许执行时间?