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