I'm trying to install a certificate in the Local Machine Store in a custom action. The certificate is installed, but when I use it to query AWS, I get this error:
Object contains only the public half of a key pair. A private key must also be provided.
The installer is running elevated, the target is Windows Vista.
If I use a separate .exe to install the exact same certificate, using the exact same code, it works. So what is it that differs when installing a certificate using the Windows Installer?
The code:
private void InstallCertificate(string certificatePath, string certificatePassword)
{
  if (IsAdmin())
  {
    try
    {
      X509Certificate2 cert = new X509Certificate2(certificatePath, certificatePassword,
        X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
      X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
      store.Open(OpenFlags.ReadWrite);
      store.Add(cert);
      store.Close();
    }
    catch (Exception ex)
    {
      throw new DataException("Certificate appeared to load successfully but also seems to be null.", ex);
    }
  }
  else
  {
    throw new Exception("Not enough priviliges to install certificate");
  }
}