.net - tutorial - ClickOnce de-firma nuestro ejecutable y dice "Editor desconocido"
clickonce visual studio 2017 (4)
Estamos desarrollando una aplicación que se implementará a través de ClickOnce. Tenemos un certificado de firma de código de VeriSign que estamos utilizando para firmar nuestra aplicación (a través de signtool.exe
post-build) y nuestros manifiestos ClickOnce. Actualmente estamos teniendo dos problemas relacionados con la firma:
Estamos firmando nuestro .exe utilizando nuestro certificado. Después de compilar nuestra aplicación, podemos ver que está firmada (por ejemplo, a través de "signtool Verify / pa TheExecutable.exe"). Pero después de instalar la aplicación a través de ClickOnce, el archivo .exe ya no está firmado.
Estamos firmando nuestros manifiestos ClickOnce usando nuestro certificado. Pero cuando intentamos instalar la aplicación a través de ClickOnce, el instalador de ClickOnce dice "Publisher desconocido".
El problema # 1 siempre ha sucedido. El problema # 2 a veces desapareció misteriosamente, pero siempre vuelve poco después, y lo hemos estado viendo constantemente durante algunas semanas.
¿Algunas ideas?
Así es como manejo la firma del manifiesto y la firma del exe. Agrego esto al final de mi archivo .csproj (lo edito en un editor de texto).
<Target Name="AfterBuild">
<CallTarget Targets="SignOutput" />
</Target>
<Target Name="SignOutput">
<PropertyGroup>
<TsUrl>http://timestamp.comodoca.com/rfc3161</TsUrl>
</PropertyGroup>
<ItemGroup>
<SignableFiles Include="$(ProjectDir)obj/$(ConfigurationName)/myappname.exe" />
</ItemGroup>
<Exec Command="signtool.exe sign /n "My Company Name LLC" /tr $(TsUrl) "%(SignableFiles.Identity)"" />
</Target>
Hay un problema con la firma del archivo setup.exe usted mismo. Me encontré con esto cuando escribía artículos de ClickOnce para los tipos de P&P en MSFT. No hay ninguna solución para ello.
¿Su certificado está instalado en el almacén de certificados para la cuenta de usuario que está utilizando para generar la implementación? ¿Se especifica como un archivo en la propia solución de VS? Si es el valor predeterminado, y usted genera la implementación utilizando msbuild y mage, ¿se cerró correctamente?
Muy bien, resolví el misterio para la mitad de esta pregunta: ClickOnce toma el manifiesto de la aplicación de bin
, pero toma el EXE real de obj
. Para distribuir su archivo obj
, debe firmar el archivo en el directorio obj
.
EDIT: Aquí está la otra mitad. Instalación de .NET 4.5 Beta rompe la firma / verificación de ClickOnce, incluso en VS2010.
Seré honesto contigo, Paul. Nunca he estado realmente encantado con ClickOnce. El conjunto de herramientas nunca ha madurado realmente, excepto por el lado de publicación / despliegue manual. Ejecutar las cosas a través de MSBuild nunca ha sido una buena experiencia y Mage.exe siempre parece tener problemas para mí. La mayoría de las veces, mis problemas han girado en torno a que el número de versión no se ha configurado correctamente.
Dicho esto, creo que nuestros mayores problemas vinieron al tratar de administrar las cosas a través de la interfaz de usuario de configuración en Visual Studio. Me ha resultado útil intentar depender un poco menos de la "magia" de MSBuild, pasar los parámetros necesarios a MSBuild y tomar un poco más de control dentro del archivo csproj.
No sé cómo es la configuración de su compilación, pero para nosotros, tenemos a Jenkins ejecutando un archivo Rake que invoca a MSBuild en la solución. Esto nos permite enviar parámetros específicos a MSBuild desde el archivo Rake.
Específicamente, introducimos valores para ApplicationVersion
, ApplicationRevision
, MinimumRequiredVersion
y OutDir
. En cuanto a las cosas a tener en cuenta en el propio csproj, desea asegurarse de que ManifestCertificateThumbprint
, ManifestKeyFile
, GenerateManifests
y SignManifests
estén configurados. También establecimos el objetivo de compilación predeterminado en Publish
, pero no estoy seguro de que eso sea tan relevante.
No puedo hablar de por qué ClickOnce "quita la firma" de su ejecutable, aparte de que tal vez el ejecutable que está firmando no sea el que cree que está empaquetado en el paquete de ClickOnce. En otras palabras, puede estar creando un nuevo ejecutable y lanzándolo en el paquete en lugar del que ya firmó. Sin embargo, creo que tendría que saber un poco más acerca de su configuración para poder hacer esa llamada.
Para lo que valga, si pudiera hacerlo de nuevo, no pondría mis huevos en la cesta ClickOnce. En realidad, solo es una gran experiencia para quienes ejecutan Internet Explorer o si ha instalado el complemento para Chrome. Es más trabajo, pero actualmente estoy trabajando en una solución que imita la historia de actualización de Chrome. Tienen un paquete ClickOnce para usuarios de Internet Explorer, pero en realidad solo se utiliza para descargar un paquete de instalación de Windows que instala Chrome.exe y Update.exe. Se incluyen muchos detalles en la documentación técnica de Omaha (también conocida como Google Update).