Обновление: @OceanAirdrop сделал всю работу ниже и сделал ее доступной на github: https://github.com/OceanAirdrop/ExtendClickOnceCertificate, у него есть инструкции по использованию на целевой странице readme.
Оригинальные детали:
Обновление pfx - это путь, о котором говорит @ Энди Блэкман, но когда у меня возникли проблемы с работой в современных окнах, в компаний renewsert возникли проблемы. Чтобы исправить зависимости may.be/renewcert, другой парень переписал ее на C #, чтобы вы могли использовать ее в современной Visual Studio:
https://nathanpjones.com/2013/01/renewing-temporary-certificate/
Загрузите исходный код со своего веб-сайта, скомпилируйте и запустите.
Если вы получаете «system.accessviolationexception» при сортировке в CertNameToStr для wcslen, то внесите следующие изменения, чтобы сортировка не взорвалась:
В Crypt.cs: в строке 130 изменить переменную psz, чтобы использовать char [] вместо строки:
[DllImport("crypt32.dll", CharSet = CharSet.Auto)]
- internal static extern int CertNameToStr(X509Encoding dwCertEncodingType, ref CRYPT_DATA_BLOB pName, CertNameType dwStrType, ref string psz, int csz);
+ internal static extern int CertNameToStr(X509Encoding dwCertEncodingType, ref CRYPT_DATA_BLOB pName, CertNameType dwStrType, [In, Out] char[] psz, int csz);
В Program.cs: строка 131 использует буфер символов вместо строки:
- //var buffer = new char[1024];
- string buffer = new string('\0', 1024);
+ char[] buffer = new char[1024];
+ //string buffer = new string('\0', 1024);
int d;
- if ((d = Crypt.CertNameToStr(Crypt.X509Encoding.ASN_Encodings, ref certNameBlob, Crypt.CertNameType.CERT_X500_NAME_STR, ref buffer, 1024 * sizeof(char))) != 0)
+ if ((d = Crypt.CertNameToStr(Crypt.X509Encoding.ASN_Encodings, ref certNameBlob, Crypt.CertNameType.CERT_X500_NAME_STR, buffer, 1024 * sizeof(char))) != 0)
- восстановление
Чтобы запустить его для быстрого обновления сертификата на пять лет по умолчанию, используйте команду cmd:
"[path-to-renew-cert-proj-dir\bin\Debug\]renewCert.exe" [old-cert-path\]old_cert_name.pfx [new-cert-path\]new_cert_name.pfx