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:
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
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
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:
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
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