首页 > 解决方案 > 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”一切正常。谁能解释一下到底是什么问题。

标签: uwppinvokedllimportwindows-community-toolkit

解决方案


但是如果我在我的项目中手动包含“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 的这个子集。


推荐阅读