Probléme avec fichier XSN crée par makecab - InfoPath Dev
in

InfoPath Dev

Probléme avec fichier XSN crée par makecab

Last post 07-04-2007 12:37 AM by skaaal. 10 replies.
Page 1 of 1 (11 items)
Sort Posts: Previous Next
  • 05-22-2007 03:45 PM

    Probléme avec fichier XSN crée par makecab

    Salut tout le monde,

    J'ai un pepin avec les fichiers XSN crées avec makecab. je n'arrive simplement pas en créer des msi avec regform.

    le scenario est le suivant:

    Je crée avec visual studio 2003 une application infopath.

    avec un batch, je crée avec makecab un fichier xsn que j'essaie d'utiliser avec regform pour créer un fichier msi et c'est la que ca câle.

    Remarque, le fichier est de 205 kO .. quand je l'ouvre en mode "design" et je le sauvgarde, il est d'une taille de 208 kO. ce dernier est utilsable par regform.

    la comparaison du contenu des deux fichiers ne revele pas d'anomalies. mieux encore, desempaqueter les fichiers du xsn qui marche, et les empaqueter á nouveau avec makecab donne un xsn qui ne marche pas.

    je doute que c'est a cause de la compression avec makecab, j'utilise un fichier de directives, ddf avec la syntaxe suivante:

    .OPTION EXPLICIT

    .Set CabinetNameTemplate=myfile.xsn    

    .Set CompressionType=MSZIP

    .Set UniqueFiles=Off

    .Set Cabinet=On

    .Set Compress=on

    .Set DiskDirectory1=mydirectory

     

     

    auriez vous une idée? un conseil? merci

     

    j'utilise Visual studio 2003, Framework 1.1 et infopath 2003 sp1

    Infopath 2003 SP1; Framework 1.1; Visual Studio 2003; Vb.net
  • 05-23-2007 06:25 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    Salut,

     Pourquoi tu ne fait pas un MSI vu que tu as Visual Studio?

     C'est trois plus simple pour toi et celui qui veux l'installé

     MSI = projet de déploiement.

     Tu glisse ton xsn dedans tu donne un répertoire par défaut qui peut biensur être changé durant l'installation et tu peux mettre d'autre chose..

     ++

    Thierry

    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 05-24-2007 08:17 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    Bonjour,

    Merci pour la reponse

    j'ai ecrit plus haut :

    "J'ai un pepin avec les fichiers XSN crées avec makecab. je n'arrive simplement pas en créer des msi avec regform."

    Si ce n'est pas assez clair je reformule:

    J'ai les fichiers crees par Visual Studio ..

    je les empaquete avec makecab dans un fichier XSN.

    de fichier XSN, je veux creer MSI avec RegForm.

    Mon probleme est le suivant : Le fichier crée par MakeCab <> fichier crée par le designer Infopath, Contenu du fichier crée par MakeCab=Contenu du fichier crée par le designer Infopath.

    Merci

    Infopath 2003 SP1; Framework 1.1; Visual Studio 2003; Vb.net
  • 05-24-2007 11:20 PM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    "je les empaquete avec makecab dans un fichier XSN."

     Euh tu sais qu'il existe un menu pour publier ton formulaire dans Infopath? Fichier->publier

     La tu lui donne un nom et tu l'enregistre.

     Tu ouvre un nouveau projet dans VS 2003 tu choisis autre type de projets->configuration et déploiement->Projet d'installation.

     Tu glisse ton formulaire infopath dans le projet tu défini tes quelques option et et tu fait projet->générér et le tour est joué.

    ++

    Thierry

    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 05-25-2007 12:09 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    Oui, je sais qu'il existe un tel menu, d'ailleurs quand je dis "le fichier crée par le deigner infopath" c'est justement de ce fichier que je parle.

    Ce que j'essaie de faire -pour le compte d'un client qui peut a tout moment changer le code dans Visual Studio - est simplement d'automatiser le reste.

    a partir des fichiers de Visual Studio desempaquetés (manifest, template, schema ...)  créer un MSI de deploiment par simple batch.

    le fichier batch lui meme est genéré automatiquement (specifique á chaque projet=application visual studio).

    Mon probleme n'est pas au niveau conceptuel mais plutot un bug de realisation, car comme cité precedement, les fichiers XSN crées par mon batch et ceux crées par le "designer Infopath" ont le meme contenu apres desempaquetage mais n'ont pas la meme taille. et la creation des MSI ne marche pas avec mes fichiers d'ou le soupcon que c'est la syntaxe de creation avec MakeCab qui n'est pas correcte.

    l'entete du fichier DDF est dans mon premier post.

    j'espere que c'est clair mainenant.

    merci

    @+

    Infopath 2003 SP1; Framework 1.1; Visual Studio 2003; Vb.net
  • 05-25-2007 12:16 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    T'as essayé de créer ton xsn avec un programme qui génére des ZIP au lieu de makecab?

    Moi j'avais essayé a l'époque et j'y étais arrivé mais je me souviens plus quelle programme j'avais utiliser car je me souviens que ca ne marchait qu'avec certain et pas d'autre (Winzip).

     ++

     Thierry

    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 05-25-2007 02:47 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    Je n'ai pas essayé. car comme j'ai dit, c'est pour le compte d'un client. je dois me restreindre aux standards microsoft et plus exactement à la configuration dans ma signature.

    J'arrive a creer des XSN mais ils ne sont pas exploitables directement. il faut les ouvrir d'abord avec infopath et les sauvgarder sans rien changer.

    du coup, XP crée des fichiers ZIP. ne saurais tu pas par le biais de quel programme?

    @+

    Infopath 2003 SP1; Framework 1.1; Visual Studio 2003; Vb.net
  • 05-25-2007 05:34 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    Oui ca d'accord mais tu peux acheter ou trouver gratuitement des classes qui te font du ZIP (genre Icsharp mais c'est pour C#... ).

    Avant de te casser la nénette avec celui de windows fait déjà un test prend tes fichiers zip-les avec et renome-le en xsm puis si tu peux l'ouvrir c'est que tu te retrouve sur le bon chemin... Non je ne sais pas quelle est le programme que microsoft utilise pour ces ZIP.

     A tout hasard essaye de poster ton problème dans la section anglaise de ce forum quelqu'un aura peut-être eu le même problème que toi.

     ++

    Thierry

    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 05-25-2007 06:26 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    renommer les fichiers tout simplement ne marche pas.

    le format zip et cab sont differents de part leurs logiques de compressions. un programme de zip qu'on lance avec la ligne de commande avec des parametres de compressions permettant de specifier le format cab comme resultat pourrait marcher.

    j'ai deja poste le probleme dans "workarounds/errors/bugs" mais sans resultat.

    Infopath 2003 SP1; Framework 1.1; Visual Studio 2003; Vb.net
  • 05-25-2007 07:36 AM In reply to

    Re: Probléme avec fichier XSN crée par makecab

    le sous forum bugs étais peut-être pas approprié car jusqu'a preuve du contraire ca n'en est pas un car c'est toi qui ne fait pas correctement le cab ou le zip et pas Infopath

    Essaye plutot dans General avec un sujet du genre: "How to manually produce a xsn".

    ++

     Thierry

    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 07-04-2007 12:37 AM In reply to

    • skaaal
    • Not Ranked
    • Joined on 05-23-2006
    • Italy
    • Posts 7

    Re: Probléme avec fichier XSN crée par makecab

    Je me suis fait une classe pour gérer les CAB et les XSN signés. C'est testé et je l'utilise pour automatiser la géneration de fichiers XSN modifiés et les resigner. Si ça peut t'aider...

     

    Public Class CABHandler
        Private mFileCab As FileInfo
        Private mDossier As DirectoryInfo

        ' Esegue l'archiviazione
        Private Sub Compresse(ByVal FileIstruzioni As FileInfo)
            Dim psi As New ProcessStartInfo
            Dim pro As Process
            psi.WorkingDirectory = Path.Combine(My.Application.Info.DirectoryPath, "../cabsdk")
            psi.FileName = "makecab.exe"
            psi.Arguments = "/F """ & FileIstruzioni.FullName & """"
            psi.WindowStyle = ProcessWindowStyle.Hidden
            pro = Process.Start(psi)
            pro.WaitForExit()
        End Sub

        ' Estrai il file CAB in una cartella nuovata
        Public Function Extrait() As Boolean
            Dim OutDir As String
            OutDir = Me.ExtraireCAB(Me.ArchiveCAB.FullName)
            If OutDir Is Nothing Then
                Return False
            End If
            Me.mDossier = New DirectoryInfo(OutDir)
            Return True
        End Function


        Private Function ExtraireCAB(ByVal xsn_file As String) As String
            Dim extractDir As String
            Dim i As Integer
            Dim si As New ProcessStartInfo
            Dim Processo As Process

            Do
                i = i + 1
                extractDir = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, _
                                          String.Format("VERIFICA{0}", i))
            Loop Until Not Directory.Exists(extractDir)

            Directory.CreateDirectory(extractDir)

            si.WorkingDirectory = Path.Combine(My.Application.Info.DirectoryPath, "..\cabsdk")
            si.Arguments = String.Format("/Y /E /L ""{0}"" ""{1}""", extractDir, xsn_file)
            si.FileName = "extract.exe"
            si.WindowStyle = ProcessWindowStyle.Hidden
            Processo = Process.Start(si)
            If Not Processo.WaitForExit(10000) Then
                Return Nothing
            End If
            Return extractDir
        End Function
        Public ReadOnly Property DossierOutput() As DirectoryInfo
            Get
                Return mDossier
            End Get
        End Property
        Public Property ArchiveCAB() As FileInfo
            Get
                Return mFileCab
            End Get
            Set(ByVal value As FileInfo)
                mFileCab = value
            End Set
        End Property
        Public Sub New(ByVal FileCABoXSN As String)
            Me.New(New FileInfo(FileCABoXSN))
        End Sub
        Public Sub New(ByVal FileCABoXSN As IO.FileInfo)
            Dim OutputCAB As String
            Select Case FileCABoXSN.Extension.ToLower
                Case ".xsn"
                    OutputCAB = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, FileCABoXSN.Name.ToLower.Replace(".xsn", ".cab"))
                    If File.Exists(OutputCAB) Then
                        File.Delete(OutputCAB)
                    End If
                    FileCABoXSN.CopyTo(OutputCAB)
                    Me.ArchiveCAB = New FileInfo(OutputCAB)
                Case ".cab"
                    Me.ArchiveCAB = FileCABoXSN
                Case Else
                    Throw New InvalidOperationException("Estensione non valida : " & FileCABoXSN.FullName)
            End Select
        End Sub
        'Firma i moduli se non sono firmati
        Public Function EstSigné() As Boolean
            Dim pi As New ProcessStartInfo
            Dim p As Process
            Dim firmato As Boolean

            pi.FileName = "chktrust.exe"
            pi.WorkingDirectory = Path.Combine(My.Application.Info.DirectoryPath, "..\cabsdk")
            pi.Arguments = " -q " & Me.ArchiveCAB.FullName
            pi.WindowStyle = ProcessWindowStyle.Hidden
            p = Process.Start(pi)
            p.WaitForExit()

            firmato = (p.ExitCode = 0)
            p.Close()
            Return firmato
        End Function
        Public Function CreeXSN(ByVal XSNFinale As FileInfo, ByVal FirmaSubito As Boolean) As Boolean
            'Crea un file TXT che mi servira per creare il file cab
            Dim CabinetNameTemplate As String
            Dim DiskDirectoryTemplate As String
            Dim stringaFile As String
            Dim FileNameTXT As String
            Dim fileDir As IO.FileInfo
            Dim IstrWriter As TextWriter
            Dim FileIstruzioni As FileInfo

            Me.ArchiveCAB.Delete()

            CabinetNameTemplate = ".Set CabinetNameTemplate=""" & Me.ArchiveCAB.Name & """"
            DiskDirectoryTemplate = ".Set DiskDirectoryTemplate=""" & Me.ArchiveCAB.DirectoryName & """"

            ' Crea un file di testo con le istruzioni per il programma di CAB
            FileNameTXT = "FileList.txt"

            FileIstruzioni = New FileInfo(Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, FileNameTXT))

            IstrWriter = FileIstruzioni.CreateText()
            IstrWriter.WriteLine(CabinetNameTemplate)
            IstrWriter.WriteLine(DiskDirectoryTemplate)
            ' Il file deve contenere la lista dei file da archiviare
            For Each fileDir In Me.DossierOutput.GetFiles
                stringaFile = """" & fileDir.FullName & """"
                IstrWriter.WriteLine(stringaFile)
            Next
            IstrWriter.Close()

            'Chiamo le funzioni per comprimere e firmare
            Me.Compresse(FileIstruzioni)
            Me.ArchiveCAB.CopyTo(XSNFinale.FullName, True)
            If FirmaSubito Then
                CABHandler.Signe(XSNFinale.FullName)
            End If

            Return True
        End Function
        Public Shared Function Signe(ByVal FileXSNoCAB As String) As Boolean
            Dim Psi As New ProcessStartInfo
            Dim pro As Process

            Psi.WorkingDirectory = Verificatore.PATH_SIGNTOOL
            Psi.FileName = "signtool.exe"
            Psi.Arguments = "sign /a " & FileXSNoCAB
            Psi.WindowStyle = ProcessWindowStyle.Hidden
            pro = Process.Start(Psi)
            If Not pro.WaitForExit(10000) Then
                MsgBox("Impossibile firmare!")
                Return False
            End If
            Return True
        End Function
     
    End Class
     

Page 1 of 1 (11 items)
Copyright © 2003-2019 Qdabra Software. All rights reserved.
View our Terms of Use.