GetProductInfo()在UWP应用中提供异常

时间:2018-07-09 09:37:20

标签: uwp pinvoke dllimport windows-community-toolkit

我正在使用 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”,则一切正常。 谁能解释一下到底是什么问题。

1 个答案:

答案 0 :(得分:0)

  

但是,如果我在项目中手动包含“ Kernel32.dll”,则一切正常。谁能解释一下到底是什么问题。

简而言之,GetProductInfo方法在UWP中不可用。 UWP中不支持所有win32 API。 Windows 10通用Windows平台(UWP)应用程序只能使用Win32和COM API的子集。参见Win32 and COM APIs for UWP apps

您在项目中手动包含了“ Kernel32.dll”。实际上是您将此dll包含在您的应用程序包中。看来它可以在您的测试环境中运行,但是当您要将应用发布到Windows应用商店时,您的软件包将无法通过WACK。 Windows应用程序认证工具包允许您的应用程序仅使用Win32和COM API的此子集。