Я идентифицировал проблему, связанную с созданием приложений, использующих C:\Windows\System32\CertEnroll.dll в качестве ссылки.
Следующий код отлично работает при компиляции с использованием VS 2015 в Windows 7, а затем запускается на компьютере под управлением Windows 7.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CERTENROLLLib;
namespace CertTest
{
class Program
{
static void Main(string[] args)
{
try
{
CX509PrivateKey key = new CX509PrivateKey();
key.ContainerName = Guid.NewGuid().ToString();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
Когда вы пытаетесь скомпилировать это в Windows 10, а затем попробуйте запустить его на компьютере под управлением Windows 7, он выдает следующую ошибку.
"Невозможно передать COM-объект типа" System.__ ComObject "в тип интерфейса" CERTENROLLLib.CX509PrivateKey ". Эта операция завершилась неудачно, поскольку вызов QueryInterface для COM-компонента для интерфейса с IID '{728AB362-217D-11DA-B2A4 -000E7BBB2B09} 'не удалось из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
У меня было несколько человек, которые реплицировали его, и я хотел бы получить больше информации, прежде чем обращаться в Microsoft о том, что происходит здесь.
Я думаю, мой вопрос: может ли кто-нибудь подтвердить это или подтвердил, что они нарушили совместимость?