您没有提到它,但是该进程是否以另一个用户身份运行?
除非您特别选择计算机帐户证书存储,否则您将向您的个人证书存储(您的用户帐户)添加证书。这些在以其他用户身份运行时不可用。
要为所有用户提供证书,请将其添加到计算机证书存储区:
- 启动 mmc.exe
- 按 CTRL+M(添加/删除管理单元)
- 选择证书,点击添加
- 选择计算机帐户,单击完成
- 导入您的证书
如果您愿意,您还可以选择服务帐户并选择需要访问证书的服务。
MSDN 上的这篇文章涵盖了相同的步骤,并且更加冗长。
编辑:
向机器存储添加证书需要提升权限。如果您没有将其捆绑在 MSI 安装程序中,我建议您编写一个单独的 InstallCertificate.exe(控制台或 Windows 应用程序)来执行安装。
在 Visual Studio 中:
创建一个新的控制台/Windows 应用程序并添加一个应用程序清单文件(添加项目/CTRL+SHIFT+A)。在刚刚添加的app.manifest文件中,更改这一行
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
进入这个
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
将此代码放在 Program.cs 中(在将其推送到生产之前添加一些日志记录和错误处理!):
using System;
using System.Security.Cryptography.X509Certificates;
namespace InstallCertificate
{
class Program
{
static void Main(string[] args)
{
string cerFileName = args[0];
X509Certificate2 certificate = new X509Certificate2(cerFileName);
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
store.Close();
}
}
}
运行应用程序。您应该得到 UAC 提示,并且证书应该安装在您机器的根证书存储中。