Magazine Internet

[WMC] Faire un installer propre pour ses add-in

Publié le 28 décembre 2009 par Jeremy.jeanson

Le SDK de média center étant ce qu’il est, si l’on souhaite faire une solution de déploiement via un Visual Studio Pro ou supérieur il faut tout faire à la main.

Voici donc les étapes à ne pas rater :

1) Déployer votre add-in dans le GAC.

2) Intégrer l’enregistrement de votre add-in via le setup (register.exe) .

Pourquoi ne pas faire une classe installer?

Cela ne fonctionnera pas, j’ai testé longuement et ceci s’est solder par un échec (soucis d’accès lié au programme d’enregistrement de media center).

Pourquoi ne pas faire un .bat, cmd?

Les bat et cmd ne sont pas acceptés par Visual Studio

Pourquoi pas un .vbs?

Pour une histoire de droits d’accès… notre programme a besoin des droits d’administrateurs.

On fera donc une application console :

L’application console devrat avoir un manifest afin de déclencher l’UAC si elle est active:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Et un code tout simple comme celui-ci pour lancer l’enregistrement et le dés-enregistrement si on passe un argument:

Vb

Private Const c_Process As String = "%windir%\ehome\RegisterMCEApp.exe"
Private Const c_ArgumentsInstall As String = "/allusers Registration.xml"
Private Const c_ArgumentsUnInstall As String = "/allusers Registration.xml /u"

Sub Main(args As String())
    If (args IsNot Empty _
        AndAlso args.Length > 0) Then
    
        System.Diagnostics.Process.Start( _
            c_Process, _
            c_ArgumentsUnInstall)
    
    Else
    
        System.Diagnostics.Process.Start( _
            c_Process, _
            c_ArgumentsInstall)
    
    End If               
End Sub

C#

private const String c_Process = @"%windir%\ehome\RegisterMCEApp.exe";
private const String c_ArgumentsInstall = @"/allusers Registration.xml";
private const String c_ArgumentsUnInstall = @"/allusers Registration.xml /u";

static void Main(string[] args)
{
    if (args != null
        & args.Length > 0)
    {
        System.Diagnostics.Process.Start(
            c_Process,
            c_ArgumentsUnInstall);
    }
    else
    {
        System.Diagnostics.Process.Start(
            c_Process,
            c_ArgumentsInstall);
    }               
}

Ensuite on intègre ce programme dans les actions custom du msi en pensant bien à indiquer que ce programme n’a pas de classe installer et en ajoutant un argument (/u par exemple) pour l'a désinstallation.

3) Penser à intégrer le fichier Registration.xml dans votre msi.

… et voila!


Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte