You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# UWP项目中使用Certificate Enrollment API的可行性及问题咨询

UWP中能否使用CertEnroll API?

问题背景与遇到的错误

  • 环境:x64架构的C# UWP打包项目,尝试引用Windows\SysWow64路径下的CertEnroll.dll和certcli.dll,编写代码如下:
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using CERTCLILib;
using CERTENROLLLib;
...
CCspInformation cspInformation = new CCspInformationClass();
cspInformation.InitializeFromName(CngProvider.MicrosoftSoftwareKeyStorageProvider.Provider);
  • 编译错误:返回CS1752:“Interop类型‘CCspInformationClass’无法嵌入,请改用适用的接口”。将项目文件中EmbedInteropTypes属性设为false后编译成功,但调试时抛出异常:无法加载程序集‘Interop.CERTENROLLLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’,系统找不到指定文件。

  • 后续尝试及异常:移除CertEnroll.dll引用,手动添加Interop.CERTENROLLLib.dll并配置:

<ItemGroup>
   <Reference Include="Interop.CERTENROLLLib">
      <HintPath>\.\Interop.CERTENROLLLib.dll</HintPath>
      <EmbedInteropTypes>False</EmbedInteropTypes>
   </Reference>
</ItemGroup>

调试时创建CERTENROLLLib.CCspInformationClass实例抛出COMException:使用CoCreateInstanceFromApp创建CLSID为{884E2007-217D-11DA-B2A4-000E7BBB2B09}的COM组件实例失败,错误80040154:类未注册(HRESULT异常:0x80040154 (REGDB_E_CLASSNOTREG))。

  • 其他尝试:使用regsvr32注册组件提示“找不到入口点”,regasm注册提示“无法加载文件,因为它不是有效的.NET程序集”;切换项目目标平台为x86后程序崩溃。该API在常规.NET项目中可正常运行。

结论

CertEnroll相关的传统COM组件无法直接在UWP项目中使用,核心原因如下:

  1. UWP运行在沙箱环境中,对系统级COM组件的访问有严格限制,CertEnroll不在UWP允许调用的API范围内,常规方式无法突破沙箱限制。
  2. 手动添加互操作程序集后,会因为沙箱内无法注册COM组件、组件访问权限不足等问题,导致实例化失败,出现类未注册的错误。

若需在UWP中实现证书相关功能,应使用UWP专属的Windows.Security.Cryptography.Certificates命名空间下的API,该API完全适配UWP沙箱环境,支持证书创建、管理、导入导出等常见操作。

内容的提问来源于stack exchange,提问作者Stanislav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:05:20