Génération de setup à la volée

pcidss Messages postés 1 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 14 mars 2008 - 14 mars 2008 à 16:55
XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009 - 20 nov. 2008 à 22:06
Bonjour à tous,

Je ne sais pas si je poste dans le bon forum ou si je commet une erreur, en tout cas ce n'est pas faute d'avoir cherché dans le forum sans trouver d'information. Je ne tenais pas à poster de doublon :)

Je rencontre actuellement un soucis et peut etre que l'un d'entre vous saura m'aiguiller:

J'ai réalisé un client messenger en VB et généré mon setup d'installation via NSIS.
Pour les besoins du client, il faudrait que lorsque le client est téléchargé on insère dedans une sorte de tracker.
Imaginons, si le client est téléchargé avec l'url dl.php?blabla=coincoin, j'aimerai insérer dans mon setup un fichier txt ou ini qui comprendrait "coincoin".

Alors j'ai bien une idée farfelu de faire un script en PHP auquel je spécifie un setup "clean", et le script ouvre l'archive LZMA, insère le txt et reforme le setup par le biais du script NSIS, mais d'un part c'est gore, d'autre part ca risque d'être gourmant en ressources.

Si l'un d'entre vous dispose d'une solution miracle (pour un serveur Linux), je suis preneur !
Un grand merci à l'avance pour vos lumières :D

1 réponse

XelectroX Messages postés 209 Date d'inscription samedi 11 novembre 2000 Statut Membre Dernière intervention 6 novembre 2009
20 nov. 2008 à 22:06
Informes-toi sur Mono et CodeDom de .NET ainsi que leurs compatibilité ;)

- Crée ton code de l'installateur dans un fichier .vb (qui ne devra pas être compiler dans le programme du générateur d'installateur) en intégrant 2 namespaces ("My.Resources" et un avec un nom du genre "Installer" ou ce que tu veux en fait), et importe Microsoft.VisualBasic, System, (System.Collections, je suis pas sûr qu'il soit obligatoire, à tester)
Pour le namespace "My.Resources", regarde en bas du post ;)
- Observe le format d'un fichier .resx
- Crée ton code permettant de le générer
- Utilise un shell avec le programme "ResGen.exe" que tu peux trouver dans .NET Framework SDK (pour générer un fichier .resources à partir de ton .resx)
- Génére l'exécutable grâce au bout de code ci-dessous

Bout de code VB.NET de CodeDom :
        Dim src As String
        'Lit tout ton fichier et place le contenu dans la variable src
        Dim Compiler As CodeDom.Compiler.CodeDomProvider = CodeDom.Compiler.CodeDomProvider.CreateProvider("VB")
        Dim Options As New CodeDom.Compiler.CompilerParameters
        With Options
            .GenerateExecutable = True
            .OutputAssembly = txtOutput.Text
            With .ReferencedAssemblies
                .Add("System.dll")
            End With
            .GenerateInMemory = False
            .CompilerOptions = "/optimize"
            .TempFiles = New CodeDom.Compiler.TempFileCollection(".", True)
            .MainClass = "Namespace.Main"
            .EmbeddedResources.Add("Resources.resources")
        End With
        Dim Results As CodeDom.Compiler.CompilerResults
        Dim Sources(0) As String
        Sources(0) = src
        Results = Compiler.CompileAssemblyFromSource(Options, Sources)


        If Results.Errors.Count > 0 Then
            ' Display compilation errors.
            MsgBox("Erreurs lors de la compilation !", MsgBoxStyle.Critical)
            Dim ce As CodeDom.Compiler.CompilerError
            For Each ce In Results.Errors
                Debug.Print(ce.ToString())
            Next ce
        Else
            MsgBox("Compilation terminée avec succès !", MsgBoxStyle.Information)
        End If

Code du "My.Resources"
Namespace My.Resources


    'Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder
    'à l'aide d'un outil, tel que ResGen ou Visual Studio.
    'Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen
    'avec l'option /str ou régénérez votre projet VS.
    '''<summary>
    '''  Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées.
    '''</summary>
    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0"), _
     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
     Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
    Friend Module Resources


        Private resourceMan As Global.System.Resources.ResourceManager


        Private resourceCulture As Global.System.Globalization.CultureInfo


        '''<summary>
        '''  Retourne l'instance ResourceManager mise en cache utilisée par cette classe.
        '''</summary>
        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
            Get
                If Object.ReferenceEquals(resourceMan, Nothing) Then
                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly)
                    resourceMan = temp
                End If
                Return resourceMan
            End Get
        End Property


        '''<summary>
        '''  Remplace la propriété CurrentUICulture du thread actuel pour toutes
        '''  les recherches de ressources à l'aide de cette classe de ressource fortement typée.
        '''</summary>
        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
        Friend Property Culture() As Global.System.Globalization.CultureInfo
            Get
                Return resourceCulture
            End Get
            Set(ByVal value As Global.System.Globalization.CultureInfo)
                resourceCulture = value
            End Set
        End Property
    End Module
End Namespace

En espérant t'avoir éclairé, mais je suis incertain pour l'utilisation sur Mono ...
0
Rejoignez-nous