1. #1
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 265
    Points : 117
    Points
    117

    Par défaut Fichiers "manifests" pour executer un programme compilé en VB5 sous Seven sans être admin

    Bonsoir à tous,

    Voici un petit problème épineux :

    J'ai créé un programme avec VB5. Il est livré sans installeur, juste avec un fichier zip contenant
    - le programme .EXE
    - les deux DLL nécessaires
    - les deux OCX nécessaires
    - le fichier .manifest

    Ca a toujours fonctionné sur toutes les versions de windows, de Windows 95 jusque Windows 10

    Cependant un utilisateur, qui a un compte limité sur une machine sous windows 7, tombe sur une erreur : "Erreur d'execution 339 : le composant 'MSFLXGRD.OCX' n'est pas enregistré correctement le fichier est absent ou incorrect"

    Sauf que les fichiers sont corrects, et aucune autre version de MSFLXGRD.OCX sur l'ordi pouvant créer un conflit

    L'utilisateur doit il impérativement faire une manip avec un compte administrateur pour pouvoir lancer mon programme ?

    L'intérêt de mon programme était son concept "portable" (pas d'installation, utilisation possible depuis une clef USB)

    Est-il possible de rendre mon programme .EXE "compact" et "autonome" (lié avec des DLL comme le fait ILRepack que j'utilise avec VB.NET par exemple) ?

    Merci

    A bientôt

    Cordialement

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 265
    Points : 117
    Points
    117

    Par défaut

    Bonsoir,

    Je pense avoir trouvé la solution

    Mais je ne maitrise pas du tout le sujet...

    Voici mes tentatives de fichiers manifests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0" encoding="utf-8" ?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity version="4.24.0.0" processorArchitecture="X86" name="CiDess.exe" type="win32" /> 
      <description> Application Electronique </description>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="highestAvailable" /> 
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="MSFLXGRD.OCX" version="5.1.43.19" processorArchitecture="x86"/>
        </dependentAssembly>
      </dependency>
    </assembly>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
      <assemblyIdentity type="win32" name="msflxgrd.ocx" version="5.1.43.19" />
      <file name="msflxgrd.ocx">
      <comClass clsid="{6262D3A0-531B-11CF-91F6-C2863C385E30}" description="msflxgrd.ToolboxBitmap32" progid="msflxgrd.ToolboxBitmap32" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" />
      <comClass clsid="{6262D3A0-531B-11CF-91F6-C2863C385E30}" description="msflxgrd.InprocServer32" progid="msflxgrd.InprocServer32" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" />
      </file>
    </assembly>
    J'obtiens une erreur "L'application n'a pas pu démarrer car sa configuration côte à côte est incorrecte", mes fichiers manifests ne sont pas bons

    J'ai trouvé pas mal de gens sur des forums anglais parlant d'un utilitaire "MT.EXE" mais je n'arrive pas à trouver où le télécharger

    Bref si quelqu'un s'y connait en fichiers manifest son aide est la bienvenue !

    A bientôt

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 265
    Points : 117
    Points
    117

    Par défaut

    Bonsoir,

    Coup de bol sur le net j'ai pu trouver un MsFlxGrd.ocx.manifest qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <file name="msflxgrd.ocx" hashalg="SHA1">
    <comClass clsid="{2334D2B2-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}">
    </comClass>
    <comClass clsid="{2334D2B4-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}">
    </comClass>
    <comClass clsid="{6262D3A0-531B-11CF-91F6-C2863C385E30}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" description="Microsoft FlexGrid Control 6.0 (SP3)">
    </comClass>
    <typelib tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" resourceid="1" version="1.0" helpdir="">
    </typelib>
    </file>
    <comInterfaceExternalProxyStub name="IVBDataObject" iid="{2334D2B1-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}">
    </comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="IVBDataObjectFiles" iid="{2334D2B3-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}">
    </comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="IRowCursor" iid="{9F6AA700-D188-11CD-AD48-00AA003C9CB6}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}">
    </comInterfaceExternalProxyStub>
    <comInterfaceExternalProxyStub name="IMSFlexGrid" iid="{5F4DF280-531B-11CF-91F6-C2863C385E30}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}">
    </comInterfaceExternalProxyStub>
     
    </assembly>
    Ca fonctionne, mais j'aurais préféré savoir comment faire / obtenir ce fichier

    Et il faut aussi que je fasse un .manifest pour SYSINFO.OCX

    A bientôt

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    juin 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2007
    Messages : 265
    Points : 117
    Points
    117

    Par défaut

    Bonsoir,

    J'ai trouvé, c'est simple mais pas évident

    Il faut utiliser l'utilitaire MT.EXE fourni avec Visual Studio, vous l'avez dans "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin"

    Copier le fichier MT.EXE dans le dossier où se trouvent vos fichiers .EXE et .OCX

    Attention à ce que votre .EXE soit bien compilé avec les .OCX se trouvant dans le répertoire et pas des .OCX de version différente se trouvant par exemple dans C:\Windows\System32...

    Dans une ligne de commande, pour chaque fichier ocx tapez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mt.exe -tlb:fichier.ocx -dll:fichier.ocx -out:fichier.ocx.manifest
    Cela va créer les fichiers manifests pour vos OCX, ce qui donne pour moi

    SYSINFO.OCX.Manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><file name="sysinfo.ocx" hashalg="SHA1"><comClass clsid="{6FBA474B-43AC-11CE-9A0E-00AA0062BB4C}" tlbid="{6FBA474E-43AC-11CE-9A0E-00AA0062BB4C}" description="Microsoft SysInfo Control 5.0 (SP2)"></comClass><typelib tlbid="{6FBA474E-43AC-11CE-9A0E-00AA0062BB4C}" resourceid="1" version="1.0" helpdir=""></typelib></file><comInterfaceExternalProxyStub name="ISysInfo" iid="{6FBA474C-43AC-11CE-9A0E-00AA0062BB4C}" tlbid="{6FBA474E-43AC-11CE-9A0E-00AA0062BB4C}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub></assembly>
    MSFLXGRD.OCX.Manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><file name="msflxgrd.ocx" hashalg="SHA1"><comClass clsid="{2334D2B2-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}"></comClass><comClass clsid="{2334D2B4-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}"></comClass><comClass clsid="{6262D3A0-531B-11CF-91F6-C2863C385E30}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" description="Microsoft FlexGrid Control 5.0 (SP2)"></comClass><typelib tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" resourceid="1" version="1.0" helpdir=""></typelib></file><comInterfaceExternalProxyStub name="IVBDataObject" iid="{2334D2B1-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub><comInterfaceExternalProxyStub name="IVBDataObjectFiles" iid="{2334D2B3-713E-11CF-8AE5-00AA00C00905}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub><comInterfaceExternalProxyStub name="IRowCursor" iid="{9F6AA700-D188-11CD-AD48-00AA003C9CB6}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub><comInterfaceExternalProxyStub name="IMSFlexGrid" iid="{5F4DF280-531B-11CF-91F6-C2863C385E30}" tlbid="{5E9E78A0-531B-11CF-91F6-C2863C385E30}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub></assembly>
    Ensuite il faut créer le manifest du .EXE, j'ai du le faire à la main (la version des OCX se trouve en faisant clic droit sur le fichier OCX, propriété, onglet détail)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="utf-8" ?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity version="4.24.0.0" processorArchitecture="X86" name="CiDess.exe" type="win32" /> 
      <description> Application Electronique </description>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="highestAvailable" /> 
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="MSFLXGRD.OCX" version="5.1.43.19" processorArchitecture="x86"/>
        </dependentAssembly>
      </dependency>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="SYSINFO.OCX" version="5.1.43.19" processorArchitecture="x86"/>
        </dependentAssembly>
      </dependency>
    </assembly>
    Il suffit alors de fournir un dossier contenant votre .EXE, les .OCX, les fichiers manifest et bien sûr les DLL nécessaires et voilà votre appli est "portable" et peut s’exécuter sans installation ni conflit même sur un PC sans droit administrateur.

    Curieusement je n'ai pas eu besoin de faire de manifests pour les DLL (les fameuses msvbvm50.dll et VB5FR.DLL)

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  2. executer un programme depuis le C sous linux
    Par e_gaillard37 dans le forum C
    Réponses: 2
    Dernier message: 12/01/2008, 20h16
  3. executer un programme compilé
    Par mederic dans le forum C
    Réponses: 14
    Dernier message: 28/04/2006, 12h25
  4. [debutant]Executer un programme compilee sous cygwin
    Par Battosaiii dans le forum Windows
    Réponses: 4
    Dernier message: 16/10/2005, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo