Compiler regrouper fichier html / javascript

Bonjour,

J'ai une petite appli dans un repertoire en local.
dans ce repertoire, il y a donc mon fichier HTML que je lance qui fait appel a des fichiers du type JS / CSS / html des images.
J'aimerai savoir si il est possible de compiler tous cela en un seul fichier (crypté) en .html ou .exe pour que les utilisateurs ne puissent pas voir les sources de mes fichiers JS.
Ou autrement de faire un fichier qui extrait certain fichiers en auto dans un rep que je précise et le fichier principale sur le bureau mais sans que l'utilisateur vois la destination. (un peu lorsqu'une appli s'install)

Merci de votre aide
Bonne journée

28 réponses

Résumé de la discussion

La discussion porte sur la possibilité d'emballer une application locale en un seul fichier exécutable ou HTML crypté afin d'empêcher les utilisateurs de voir les sources JavaScript. Plusieurs réponses évoquent NSIS et les installateurs qui décompressent les fichiers sur le poste et offrent options de composants, tout en indiquant qu’un code JavaScript compilé reste décryptable. Des échanges mentionnent des tutoriels NSIS et des questions sur le fait de mettre un composant par défaut non décochable, tandis que d'autres rappellent les risques et limites de protection. En cas de besoin, la solution pratique consiste à déployer les fichiers via un installateur gérant les composants et les chemins d’installation, plutôt que de tenter de dissimuler le code.

Bobot (l’IA à votre service)
  1. Résultat final :
    3 composants.
    1 grisé par defaut non decochable

    Ensuite le second est coché par defaut et si l'utilisateur choisit l'autre résolution d'ecran, il peut selectionner le 3eme composant et ca decoche le second.
    donc impossible de choisir aucun composant :)
    1. Bonjour,

      Auriez vous encore en vente des cartes dbz de la série memorial photo ou carddass 3d?

      Merci de votre réponse

      Jalex80@free.fr
  2. je viens de voir que j'avais une sorte de bug dans ma compilation.
    J'ai 3 composants, un qui est grisé donc non decochable et deux autres ou l'utilisateur choisit l'un ou l'autre.

    Comment faire pour :
    Pour que l'utilisateur n'en coche qu'un seul et non les deux et obliger l'utilisateur a en cocher au moins un.
    1. regarde dans le dossier d'installation de nsis il ya pleins d'exemples sur les cases à cocher...je t'ai donné des pistes à toi de chercher un peu, pour ma part je ne suis plus ce poste pour moi c'est réglé...;-) bonnes fêtes...
  3. au chargement j'appel une fonction pour mettre la fenetre en plein ecran en gardant la barre des taches :)
    1. Milles merci a toi mais pour l'ouverture, c'est bon j'ai deja une fonction au chargement de la page :)
      1. je ne sais pas si c'est cela que tu cherches mais voici les commandes que l'on peut passer à IE:

        https://docs.microsoft.com/en-us/?mfr=true

        donc à tester si ça peut aider sinon effectivement la solution serait de passer par du javascript..;
    2. JC, c'est bon, en utilisant l'attribut : SectionIn RO la case est coché et non décochable :)
      1. @CCM, désolé pour le multiposte a la suite mais peut pas editer.

        @JC : C'est bon j'ai reussi a faire tout ce que je voulais.
        Griser une selection et lancer le fichier a la fin celon la résolution choisit par l'utilisateur. J'ai fait un copyfile tout bêtement.
        Par contre petite précision, le code FINISHPAGE_RUN, ne fonctionne pas pour lancer un fichier html, j'ai du ruser en mettant : FINISHPAGE_SHOWREADME et en modifiant le text : FINISHPAGE_SHOWREADME_TEXT

        Voila voila
        Je te souhaite de bonne fête et merci de m'avoir aidé.
      2. @ponpon17430Salut,

        pour lancer une page web, il existe plusieurs solutions, va faire un tour dans le dossier d'installation de nsis, il y a dans le dossier example : viewhtml.nsi,

        ...ensuite sur le site de nsis dans la section plugin: nsweb (lorsque tu installes le plugin, installes les fichiers exemples)...

        enfin une solution qui marche:
        commente !define MUI_FINISHPAGE_RUN et !insertmacro MUI_PAGE_FINISH
        rends toi à la section -post et écris ceci quelquepart dans cette section:

        Exec "$PROGRAMFILES\Internet Explorer\iexplore.exe -k $INSTDIR\monfichier.html"

        à la fin de l'install. l'installeur exécutera le monfichier.html en full screen...

        voilà, @+
      3. @JCEt il possible de trouver un paramètre qui l'execute pas en full screen mais en ouvrant IE sans la barre de navig / adresse etc.. ?
      4. Bonjour ponpon,

        Merci , merci ! :-)
    3. A t'on avis si je teste Section "Required Section" SectionIn RO ca passera peut etre non puisque lors de l'install, on ne demande pas si on veut installer ou non le fichier de desinstallation.
      Je vais tester ca cette aprem.
      1. Un ptit UP car j'ai beau chercher avec notre ami google mais pour une fois il n'a pas la réponse :(
        1. Je l'avais vu ce script :)
          Mais moi j'avais regardé la partie : Section "Component One (selected by default)" sec_One

          J'ai plusieurs sections :
          - Une principale qui est coché par defaut et j'aimerai justement qu'elle ne soit pas decochable.
          - Une seconde et troisieme qui ont chacune un fichier que j'extrait sur le bureau.

          Je n'ai aucune modif de la BDR a faire lors de mon install c'est juste de l'extract de fichier vers un repertoire donné.

          J'aimerai juste que la premier section soit non decochable, et que l'utilisateur puisse selection soit la section 2 ou la section 3 par la suite.

          Le must serait qu'il puisse en choisir qu'une seule mais ca serait une option de confort donc pas necessaire :)
          1. Oui c'est bien ca a un moment dans l'assistant il demade si on peut laisser le choix a l'utilisateur d'installer tel ou tel composant et dans le code ceux sont bien des sections.
            1. Bon en fait j'ai d'autres idée qui me viennent en tete pour optimiser mon programme.
              Mais par contre sur les tuto, je ai trouvé avec l'assistant comment permettre de selectionner les composants mais est ce qu'il est possible de mettre un composant par defaut et non decochable ?
              1. salut,

                je ne sais pas ce que tu veux dire par composant ?! je pense que tu parles des sections... ce que l'utilisateur peut installer et dans quel dossier ...

                il me semble que c'est possible je jetterai un oeil dans mes scripts demain après midi...
              2. salut,

                ;!insertmacro MUI_PAGE_COMPONENTS <--- à désactiver (point-virgule) pour ne pas permettre à l'utilisateur de choisir les éléments à installer...
              3. si tu as plusieurs sections dont une requise et les autres optionnelles voici un script trouver dans les tutorials ;)
                La partie du script qui t'intérèsse se trouve à SectionIn RO

                ;--- Add/Remove system macros: ---
                ; (You may place them to include file)
                Var AR_SecFlags
                Var AR_RegFlags
                 
                !macro InitSection SecName
                  ;  This macro reads component installed flag from the registry and
                  ;changes checked state of the section on the components page.
                  ;Input: section index constant name specified in Section command.
                 
                  ClearErrors
                  ;Reading component status from registry
                  ReadRegDWORD $AR_RegFlags HKLM \
                    "${REG_UNINSTALL}\Components\${SecName}" "Installed"
                  IfErrors "default_${SecName}"
                    ;Status will stay default if registry value not found
                    ;(component was never installed)
                  IntOp $AR_RegFlags $AR_RegFlags & 0x0001  ;Turn off all other bits
                  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading default section flags
                  IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE  ;Turn lowest (enabled) bit off
                  IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags      ;Change lowest bit
                 
                  ;Writing modified flags
                  SectionSetFlags ${${SecName}} $AR_SecFlags
                 
                 "default_${SecName}:"
                !macroend
                 
                !macro FinishSection SecName
                  ;  This macro reads section flag set by user and removes the section
                  ;if it is not selected.
                  ;Then it writes component installed flag to registry
                  ;Input: section index constant name specified in Section command.
                 
                  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading section flags
                  ;Checking lowest bit:
                  IntOp $AR_SecFlags $AR_SecFlags & 0x0001
                  IntCmp $AR_SecFlags 1 "leave_${SecName}"
                    ;Section is not selected:
                    ;Calling Section uninstall macro and writing zero installed flag
                    !insertmacro "Remove_${${SecName}}"
                    WriteRegDWORD HKLM "${REG_UNINSTALL}\Components\${SecName}" \
                  "Installed" 0
                    Goto "exit_${SecName}"
                 
                 "leave_${SecName}:"
                    ;Section is selected:
                    WriteRegDWORD HKLM "${REG_UNINSTALL}\Components\${SecName}" \
                  "Installed" 1
                 
                 "exit_${SecName}:"
                !macroend
                 
                !macro RemoveSection SecName
                  ;  This macro is used to call section's Remove_... macro
                  ;from the uninstaller.
                  ;Input: section index constant name specified in Section command.
                 
                  !insertmacro "Remove_${${SecName}}"
                !macroend
                ;--- End of Add/Remove macros ---
                 
                 
                ;  This constant specifies the installer file name.
                !define InstFile "AddRemove.exe"
                OutFile "${InstFile}"
                 
                ;  This constant specifies Windows uninstall key for your application.
                !define REG_UNINSTALL "Software\Microsoft\Windows\CurrentVersion\Uninstall\
                \AddRemoveExample"
                 
                InstallDir "$DESKTOP\AddRemove Example"
                Name "Add/Remove Example 1.0"
                ComponentText "Check the components you want to add and uncheck \
                the components you want to remove:"
                ShowInstDetails show
                ShowUnInstDetails show
                 
                 
                Section "Required Section"
                SectionIn RO
                  ;This section is required. It can't be removed.
                 
                  CreateDirectory $INSTDIR
                  WriteUninstaller "$INSTDIR\Uninstall.exe"
                 
                ;Writing uninstall info to registry:
                  WriteRegStr HKLM "${REG_UNINSTALL}" "DisplayName" "Add/Remove Example"
                  WriteRegStr HKLM "${REG_UNINSTALL}" "DisplayIcon" "$INSTDIR\Uninstall.exe"
                  WriteRegStr HKLM "${REG_UNINSTALL}" "DisplayVersion" "1.0"
                  WriteRegStr HKLM "${REG_UNINSTALL}" "Publisher" "THRaSH"
                  WriteRegStr HKLM "${REG_UNINSTALL}" "InstallSource" "$EXEDIR\"
                 
                  ;Under WinXP this creates two separate buttons: "Modify" and "Remove".
                  ;"Modify" will run installer and "Remove" will run uninstaller.
                  WriteRegDWord HKLM "${REG_UNINSTALL}" "NoModify" 0
                  WriteRegDWord HKLM "${REG_UNINSTALL}" "NoRepair" 0
                  WriteRegStr HKLM "${REG_UNINSTALL}" "UninstallString" \
                '"$INSTDIR\Uninstall.exe"'
                  WriteRegStr HKLM "${REG_UNINSTALL}" "ModifyPath" '"$EXEDIR\${InstFile}"'
                SectionEnd
                 
                Section "Component One (selected by default)" sec_One
                  ;Installs component one
                  ;By default this section is selected
                  DetailPrint "*** Adding Component One..."
                  CreateDirectory "$INSTDIR\Component One"
                SectionEnd
                !macro Remove_${sec_One}
                  ;Removes component one
                  DetailPrint "*** Removing Component One..."
                  RMDir /r "$INSTDIR\Component One"
                !macroend
                 
                Section /o "Component Two (unselected by default)" sec_Two
                  ;Installs component two
                  ;By default this section is not selected
                  DetailPrint "*** Adding Component Two..."
                  CreateDirectory "$INSTDIR\Component Two"
                SectionEnd
                !macro Remove_${sec_Two}
                  ;Removes component two
                  DetailPrint "*** Removing Component Two..."
                  RMDir /r "$INSTDIR\Component Two"
                !macroend
                 
                Section /o "Component Three (unselected by default)" sec_Three
                  ;Installs component three
                  ;By default this section is not selected
                  DetailPrint "*** Adding Component Three..."
                  CreateDirectory "$INSTDIR\Component Three"
                SectionEnd
                !macro Remove_${sec_Three}
                  ;Removes component three
                  DetailPrint "*** Removing Component Three..."
                  RMDir /r "$INSTDIR\Component Three"
                !macroend
                 
                 
                ;--- Add/Remove callback functions: ---
                !macro SectionList MacroName
                  ;This macro used to perform operation on multiple sections.
                  ;List all of your components in following manner here.
                 
                  !insertmacro "${MacroName}" "sec_One"
                  !insertmacro "${MacroName}" "sec_Two"
                  !insertmacro "${MacroName}" "sec_Three"
                !macroend
                 
                Function .onInit
                  ;Reads components status for registry
                  !insertmacro SectionList "InitSection"
                FunctionEnd
                 
                Section -FinishComponents
                  ;Removes unselected components and writes component status to registry
                  !insertmacro SectionList "FinishSection"
                SectionEnd
                 
                Section -Post
                  ;Showing the results
                  ExecShell "open" "$INSTDIR"
                SectionEnd
                ;--- End of Add/Remove callback functions ---
                 
                 
                Section Uninstall
                  ;First removes all optional components
                  !insertmacro SectionList "RemoveSection"
                 
                  ;Removes directory and registry key:
                  RMDIR /r $INSTDIR
                  DeleteRegKey HKLM "${REG_UNINSTALL}"
                SectionEnd
            2. Bon résultat final ca fonctionne nikel :)
              Un grand merci JC pour avoir suivis la conversation.
              Bonne journée / Fêtes
              1. C'est bon j'ai recompiler l'appli et ca passe, a mon avis c'est en transerer le .exe sur un neufgiga que ca a foiré...
                Je vais lire le lien que tu m'as donné cette aprem ou demain quand je serais dispo.

                Bonne journée / Bon week end
                1. Oui et non lol là je suis au travail donc je me suis envoyé le .exe, il lance l'install la fait sans pb par contre aucun fichier installé :( Par contre ne me demande plus de lancer l'appli a la fin :)
                  Je suis proche du but lol
                  1. Tu lui as donné des fichiers à installer au moins ? c'est le comble si t'as oublié de faire ça !

                    Tu lances l'assistant arriver au moment des sections, tu supprimes les deux fichiers exe dans la partie droite, ce sont des exemples, hein ! :)

                    ça doit se présenter comme ça dans le code:

                    Section "Mon Programme"
                    SetOutPath $INSTDIR
                    File "c:\le_chemin_vers_mon_programme\Mon Programme.exe"
                    File "Readme.txt"
                    File "c:\un_autre_dossier_avec_mes_super_applis\SuperAppli.exe
                    File "c:\un_gros_zip_velu"
                    SectionEnd

                    Tu mets les tiens,etc. et tu finis l'assistant... n'hésites pas à lire la doc...et les tutoriaux...je crois que t'en as besoin là !

                    tiens de la doc en français: http://www.todae.fr/nsis/i2k/?nsis_rub=example
                2. Un ptit UP :)
                  1. je regarde je te dis ça en début d'aprem
                  2. pour choisir le fichier à lancer c'est au début du code dans:

                    !define MUI_FINISHPAGE_RUN "$INSTDIR\monapplication.exe"

                    Va voir les tutoriaux dont je t'ai parlé cherche à la lettre R : run an application shortcut after an install...

                    tu auras plusieurs exemple...
                  3. @JCsi tu ne veux pas lancer d'application à la fin de l'install tu commente la ligne cité au dessus avec un point virgule devant...

                    ;!define MUI_FINISHPAGE_RUN "$INSTDIR\monapplication.exe"
                3. Petite ajout, j'ai testé avec fileopen mais a priori je dois mal coder la ligne pour lancer l'ouverture du fichier pourtant, il ne me marque pas d'erreur lors du compilage de l'appli :(
                  1. J'ai cette fois une derniere question lol
                    Je n'ai pas trouvé le moyen d'enlever a la fin la case lancer le programme ou a defaut spécifier quel fichier il doit lancer :(
                    1. EDIT en fait c'est bon j'ai reussi a créer le raccourcie en regardant comment il était créé pour le menu demarré :)
                      Merci beaucoup !!
                      1. @JCJe jetterai un oeil, vraiment un grand merci pour ton aide !!
                        Par contre pour entre guillemet crypter le fichier html, je n'ai pas encore regardé pour le passer en .HTA
                      2. @ponpon17430Pour ça faut voir avec Neils, pour ma part j'utilise php obfuscator, nsis pour installer zmws (ZazouMiniWebServer) et mes applis web sur les postes locaux.
                    2. Alors j'arrive bien a compiler les fichiers pour en faire un exe par contre dans l'assistant, je précise bien un raccourcie sur destop mais ca ne le créé pas...
                      Voici la ligne de commande :
                      CreateShortCut "$DESKTOP.lnk" "C:\WINDOWS\Temp\monfichier.html"
                      1. Ok, merci beaucoup pour l'aide que tu apportes JC
                        Je teste cela cette aprem si j'ai le temps.
                        Encore merci
                        • 1
                        • 2