sábado, 8 de octubre de 2011

Modificar firma de una publicación de ClickOnce

Buenos dias
Lo que explicare a continuación dependerá de saber como crear una publicación con clickOnce de nuestro proyecto con VisualStudio.

Para refirmar la publicación necesitaremos de esta aplicación (mage), pudiendo tanto utilizar una interfaz gráfica como trabajar bajo lineas de comandos de cmd o si lo necesitamos, crearnos un proceso en nuestro programa.

Que posibilidades nos puede ofrecer esta aplicación, pues posiblemente muchas, pero que haya trabajado una, que es generando una publicación podemos cambiarle el url de actualización.

Así pues, con clickOnce podemos decirle a nuestro programa que, por ejemplo, cuando arranque compruebe si existe una nueva actualización.
De tal forma, que si necesitamos diversificar nuestro programa por diversas empresas, posiblemente nos convenga que cada empresa pueda actualizarse a un repositorio distinto del resto, para mantener versiones distintas o simplemente para ahorrar coste, porque este repositorio podría estar en su propia red, evitando que cada maquina tenga que tirar de Internet para actualizarse.


Son muchas las propiedades o comandos con los que trabaja mage, pero hablare de las que mas conozco:
  • –Update Como dije, lo que haremos sera refirmar una publicación
  • –Sign Utiliza un certificado para firmar un archivo
  • –AppManifest Path del manifest o supondrá que su manifiesto de aplicación reside en el mismo directorio que el manifiesto de implementación dentro de un subdirectorio
  • –CertFile Path del directorio
  • –Password Ademas, necesitaremos también de la contraseña del certificado
A continuación pondré una función muy simple, que os lo hará comprender mas fácilmente

 Public Function FirmarPublicacion(ByVal path_programa As String, ByVal nombrePrograma As String, ByVal urlAct As String, ByVal manifest As String, ByVal cetificado As String, ByVal passCertificado As String, ByVal mage_path As String) As Boolean
        Dim resul As Boolean = True
        Try      
            Dim comando1 As String = " -Update """ + path_programa + "\" + nombrePrograma + ".application""" + " -ProviderUrl """ + urlAct + """"
            Dim comando2 As String = " -Update """ + path_programa + "\" + nombrePrograma + ".application""" + " -Publisher " + """Panel de Control (PC)""" + " -AppManifest """ + manifest + """"
            Dim comando3 As String = " -Sign """ + path_programa + "\" + nombrePrograma + ".application""" + " -CertFile """ + cetificado + """ -Password " + passCertificado

            ' Comprobamos si existe manifest los ficheros
            If Not File.Exists(path_programa + "\" + nombrePrograma + ".application") Then
                Throw New Exception("Archivo application erroneo: (" + path_programa + "\" + nombrePrograma + ".application" + ")")
            End If
            If Not File.Exists(manifest) Then
                Throw New Exception("Archivo manifest erroneo: (" + manifest + ")")
            End If
            If Not File.Exists(cetificado) Then
                Throw New Exception("Archivo certificado erroneo: (" + cetificado + ")")
            End If
            If Not File.Exists(mage_path) Then
                Throw New Exception("Archivo mage erroneo: (" + mage_path + ")")
            End If
            If Not ValidarURL(urlAct) Then
                Throw New Exception("URL ACTUALIZACIÓN mal introducida: (" + urlAct + ")")
            End If
            If Not urlAct.Contains(nombrePrograma + ".application") Then
                Throw New Exception("URL ACTUALIZACIÓN no esta asociada con archivo .application: (" + urlAct + ")")
            End If

            Dim returnS1 As String = FirmaPublicacion2(mage_path, comando1)
            Dim returnS2 As String = FirmaPublicacion2(mage_path, comando2)
            Dim returnS3 As String = FirmaPublicacion2(mage_path, comando3)

            Dim firma As Boolean = True

            If not returnS1.Contains("successfully updated") Or not returnS1.Contains("successfully signed") Then
                
            Throw New Exception(returnS1)
            End If

            If not returnS2.Contains("successfully updated") Or not returnS2.Contains("successfully signed") Then
            Throw New Exception(
returnS2)
            End If

            If not returnS3.Contains("successfully updated") Or not returnS3.Contains("successfully signed") Then
            Throw New Exception(
returnS3)
            End If

        Catch ex As Exception
            resul = False
        End Try
        Return resul
    End Function

Espero que os ayude la función, ademas no se si hasta cierto punto es mejor depender de un booleano que para la ejecución con excepciones, hay ya que cada uno la edite como quiera.

Thanks!!

2 comentarios:

franklin dijo...

una consulta . ya que trabajaste con clickonce , existe alguna manera de evitar que revise los requisitos previos ya que en equipos con w7 tarda mucho tiempo cada vez que inician la aplicacion

Teesinpain dijo...

Buenos días
Es casi un milagro entender algo de lo que escribí en este blog.... que mal expresado está.

Perdona por ello.

Entiendo que los requisitos previos los defines en la solución de Visual Studio. Si los quitas de la solución, posiblemente ClickOnce no los tenga en cuenta.

Gracias!

Publicar un comentario

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Online Project management