Nous sommes le Jeu 19 Juin, 2025 19:38
Supprimer les cookies

Page 2 sur 4Précédent 1, 2, 3, 4 SuivantTutoriel : portabiliser une application

Image Image Forum dédié à notre projet de clé USB nomade libre sous Windows

Ven 08 Fév, 2008 21:15

Bonsoir,

En fait, y'en du nouveau ... j'ai l'impression que les splashscreen apparaissent (pour les trois), mais il reste moins d'un dixième de seconde, c'est quasi invisible. En fait ça ressemble plus à un flash noir de la taille et à la place des splashscreens Framakey.

Voilà le .nsi :
Code: Tout sélectionner
; ----------------------------------------------------
; PortableInfraRecorder
; ----------------------------------------------------
; Par Totoche
; Utilisant comme base de travail les scripts de John T. Haller et Sarkos et pyg
; License : GPL
; Ce script permet de créer le lanceur de PortableInfraRecorder.
; Compiler: NSIS (http://www.nullsoft.com).
; Require plugins: newadvsplash
; $id=PortableInfraRecorder.nsi $date=2008-02-08
; ----------------------------------------------------
;Copyright (C) 2005-2007 Framakey

;Website: http://www.framakey.org

;This software is OSI Certified Open Source Software.
;OSI Certified is a certification mark of the Open Source Initiative.

;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either version 2
;of the License, or (at your option) any later version.

;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;GNU General Public License for more details.

;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
; ----------------------------------------------------
; Général
; ---- Modifiez les valeurs souhaitées ----
; Définition variables entête
!define APPLANG "Fr"
!define NAME "PortableInfraRecorder"
!define FULLNAME "PortableInfraRecorder"
!define APP "InfraRecorder"
!define VER "0.44.1.0"
!define WEBSITE "http://www.framakey.org"
!define DEFAULTEXE "InfraRecorder.exe"
!define DEFAULTAPPDIR "InfraRecorder"
; Etiquette
  Caption "${FULLNAME} - Logiciel de gravure."

; ----------------------------------------------------
; ---- à partir de là, vous n'avez normalement rien à modifier ---

; Nom de l'exécutable
  Name "${NAME}"

; Icone
  Icon "${NAME}.ico"
  WindowIcon Off
; Nom du fichier à créer
  OutFile "${NAME}.exe"

; Runtime Switches
  SetDateSave on
  SetDatablockOptimize on
  CRCCheck On
  SilentInstall Silent
  AutoCloseWindow True

; ----------------------------------------------------
; Variables

  Var IniPath
  Var DataDir
  Var AppDirectory
  Var AppExecutable
  Var AdditionalParameters
  Var DisableSplashScreen
  Var Drive
  Var ExecString

; Inclusion langue française (ajout de sarkos)
LoadLanguageFile "${NSISDIR}\Contrib\Language Files\French.nlf"

; ----------------------------------------------------
; Version Informations

  VIProductVersion "${VER}"
  VIAddVersionKey FileDescription "${FULLNAME} pour Windows"
  VIAddVersionKey LegalCopyright "GPL"
  VIAddVersionKey Comments "Permet de lancer ${APP} (${APPLANG}) depuis un disque amovible. Pour plus de détails, visitez ${WEBSITE}"
  VIAddVersionKey CompanyName "Framakey"
  VIAddVersionKey OriginalFilename "${NAME}.exe"
  VIAddVersionKey FileVersion "${VER}"

; ----------------------------------------------------
; Sections

Section "Main"

; Trouver le fichier INI, s'il y en a un
  IfFileExists "$EXEDIR\${NAME}.ini" "" CheckDataINI
    StrCpy "$IniPath" "$EXEDIR"
    Goto ReadINI

  CheckDataINI:
    Push "$EXEDIR"
    Call GetRoot
    Pop $0
    strcpy "$DataDir" "$0\Data\AppsData"
    IfFileExists "$DataDir\${APP}\${NAME}.ini" ""  NoINI
      StrCpy "$IniPath" "$DataDir\${APP}"
      Goto ReadINI

  ReadINI:
; Lit les paramètres du fichier INI
    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "${APP}Directory"
      StrCpy "$AppDirectory" "$EXEDIR\$0"

; Vérifie que les paramètres requis ci-dessus sont présents
    IfErrors NoINI

    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "AdditionalParameters"
      StrCpy "$AdditionalParameters" $0
    ReadINIStr $0 "$IniPath\${NAME}.ini" "${NAME}" "${APP}Executable"
      StrCpy "$AppExecutable" $0
    ReadINIStr $0 "$IniPath\${NAME}.ini" "SplashScreen" "DisableSplashScreen"
      StrCpy "$DisableSplashScreen" $0

; Pour n'importe quelle paramètre du fichier INI non requis contenant une chaine vide, ignorer les erreurs associées
    ClearErrors

; Correct PROGRAMEXECUTABLE si paramètre vide
    StrCmp $AppExecutable "" "" EndINI
    StrCpy "$AppExecutable" "${DEFAULTEXE}"
    Goto EndINI

  NoINI:
; Pas de fichier INI, nous utiliserons les paramètres par défaut
    StrCpy "$AdditionalParameters" ""
    StrCpy "$AppExecutable" "${DEFAULTEXE}"
    StrCpy "$DisableSplashScreen" "false"

    IfFileExists "$EXEDIR\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE
      StrCpy "$AppDirectory" "$EXEDIR\${DEFAULTAPPDIR}"
      GoTo EndINI

  EndINI:
    IfFileExists "$AppDirectory\$AppExecutable" FoundProgramEXE

  NoProgramEXE:
; Si le chemin pointant vers l'exécutable est invalide
    MessageBox MB_OK|MB_ICONEXCLAMATION `$AppExecutable est introuvable.  Vérifiez votre configuration`
    Abort

  FoundProgramEXE:
    StrCmp $DisableSplashScreen "true" CheckDrive
; Affiche le splash screen
    InitPluginsDir
    File /oname=$PLUGINSDIR\splash.jpg "${NAME}_splash.jpg"
      newadvsplash::show /NOUNLOAD 3000 200 200 -1 /L $PLUGINSDIR\splash.jpg

; Trouve la lettre du lecteur
  CheckDrive:
    Push "$EXEDIR"
    Call GetRoot
    Pop $0
    strcpy "$Drive" "$0"

; Check des paramètres
  GetAppParameters:
    Call GetParameters
    Pop $0

; Routine si pas de paramètres
  StrCmp "'$0'" "''" "" ExecWithParameters
  StrCpy $ExecString `"$AppDirectory\$AppExecutable"`
  Goto AdditionalParameters

; Routine si paramètres
  ExecWithParameters:
    StrCpy $ExecString `"$AppDirectory\$AppExecutable" $0`
    Goto ExecApp

  AdditionalParameters:
    StrCmp $AdditionalParameters "" ExecApp

; Additional Parameters
    StrCpy $ExecString `$ExecString $AdditionalParameters`

; Lancement De l'application
  ExecApp:
    Exec "$ExecString"

SectionEnd

Section .onInit
  Call Mutex
SectionEnd

; -------------------------------------------
; Obtenir les paramètres
; -------------------------------------------
Function "GetParameters"
  Push $R0
  Push $R1
  Push $R2
  StrCpy $R0 $CMDLINE 1
  StrCpy $R1 '"'
  StrCpy $R2 1
  StrCmp $R0 '"' loop
    StrCpy $R1 ' ' ; we're scanning for a space instead of a quote
  loop:
    StrCpy $R0 $CMDLINE 1 $R2
    StrCmp $R0 $R1 loop2
    StrCmp $R0 "\" "" "nofile"
      IntOp $2 $R2 + 1
    nofile:
    ;MessageBox MB_OK "r0: $R0"
    StrCmp $R0 "" loop2
    IntOp $R2 $R2 + 1
    Goto loop
  loop2:
    IntOp $R0 $R2 - $2
    IntOp $R0 $R0 - 4
    ;MessageBox MB_OK "$R2 - $2 = $R0"
    StrCpy $R7 $CMDLINE $R0 $2 ; we save the filename
    ;MessageBox MB_OK "$2"
  loop2b:
    IntOp $R2 $R2 + 1
    StrCpy $R0 $CMDLINE 1 $R2
    ;MessageBox MB_OK "rr0: $R0"
    StrCmp $R0 " " loop2b
  StrCpy $R0 $CMDLINE "" $R2
  Pop $R2
  Pop $R1
  Exch $R0
FunctionEnd

; -------------------------------------------
; Obtenir le chemin root
; Auteur : KiCHiK
; Source : http://nsis.sourceforge.net/Get_the_Root_Directory
; -------------------------------------------
Function GetRoot
  Exch $0
  Push $1
  Push $2
  Push $3
  Push $4

  StrCpy $1 $0 2
  StrCmp $1 "\\" UNC
    StrCpy $0 $1
    Goto done

UNC:
  StrCpy $2 3
  StrLen $3 $0
  loop:
    IntCmp $2 $3 "" "" loopend
    StrCpy $1 $0 1 $2
    IntOp $2 $2 + 1
    StrCmp $1 "\" loopend loop
  loopend:
    StrCmp $4 "1" +3
      StrCpy $4 1
      Goto loop
    IntOp $2 $2 - 1
    StrCpy $0 $0 $2

done:
  Pop $4
  Pop $3
  Pop $2
  Pop $1
  Exch $0
FunctionEnd

; -------------------------------------------
; Prévenir plusieurs Instances
; Sources : http://www.veekee.net/wikinsis/docs/AppendiceC.html#C.11
; -------------------------------------------
  Function Mutex
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
  Pop $R0

  StrCmp $R0 0 +3
   MessageBox MB_OK|MB_ICONEXCLAMATION "${NAME} est déjà lancé."
   Abort
  FunctionEnd

; -------------------------------------------
; Fin du script
Et le .ini :
Code: Tout sélectionner
[SplashScreen]
DisableSplashScreen=false

[PortableInfraRecorder]
InfraRecorderDirectory=InfraRecorder
InfraRecorderExecutable=InfraRecorder.exe
AdditionalParameters=

# Les options ci-dessus sont expliquées dans le ReadMe inclus.
Totoche

Messages : 398
Géo : Drôme / Ardèche

Ven 08 Fév, 2008 22:38

Si tu as réellement mis ce fichier nsi et ini, ça ne m'étonne pas qu'il ne marche pas :-) ---> InfraRecorder

Bon, je vais essayer de regarder ce week-end pour Stellarium
Tous les propos n'appartiennent qu'à leur auteur et n'engagent personne d'autre.
La liberté ne peut être que toute la liberté ; un morceau de liberté n'est pas la liberté. (Max Stirner), donc 4 CC sur 6 ne sont pas libres :-)
leviathan

Avatar de l’utilisateur
Messages : 1415

Sam 09 Fév, 2008 10:45

Bonjour,

Oui, j'ai réellement mis celui-là ... pour portabiliser InfraRecorder, j'en avait évidemment un autre pr Stellarium :!:

En Fait J'ai fait plusieurs tests pour essayer le tuto : Tous fonctionnent en version portable quand on lance le exe avant de faire le lanceur Framakey. J'ai voulu essayer avec 2 softs qui existent déjà au standard Framakey (VLC et SciTE), un nouveau InfraRecorder (pour faire un test avec un soft qui à 2 exe différents, donc deux lanceurs à faire) et Stellarium.

Pour VLC, SciTE, IR et IRExprees, j'ai réussit à faire un lanceur Framakey, mais les splashscreens seraient plutôt des "Flashscreen" (du genre invisible, un dixième de seconde).
Pour Stellarium le lanceur ouvre un fenêtre dos, qui reste vide, se ferme, puis rien. (Je te mets le .nsi en MP)

Merci
Totoche

Messages : 398
Géo : Drôme / Ardèche

Dim 10 Fév, 2008 17:49

Bon pour Stellarium, voilà un cas particulier. Je ne vois pas de solution en passant par NSIS, tout simplement car il faut être dans le dossier de Stellarium pour que le lancement fonctionne. Et je n'ai rien trouvé qui permettrait de faire croire au système que l'on est dans le dossier de Stellarium

Donc les deux solutions que j'ai trouvé, ce sont:
- soit un fichier bat:
Code: Tout sélectionner
cd Stellarium
stellarium.exe -c config.ini


- soit un fichier cpp que l'on compile:
Code: Tout sélectionner
#include <windows.h>

int main()
{
   system("cd ./Stellarium && stellarium.exe -c config.ini");
   return 0;
}
Tous les propos n'appartiennent qu'à leur auteur et n'engagent personne d'autre.
La liberté ne peut être que toute la liberté ; un morceau de liberté n'est pas la liberté. (Max Stirner), donc 4 CC sur 6 ne sont pas libres :-)
leviathan

Avatar de l’utilisateur
Messages : 1415

Dim 10 Fév, 2008 18:16

je pense que la solution du bat est la plus simple, le lanceur framakey appele le bat qui lui même lance stellarium. Pas besoin de compiler ainsi, et ça reste à la portée du grand public.
Dernière édition par dedenimes le Dim 10 Fév, 2008 21:48, édité 1 fois au total.
L'homme n'est pas fait pour travailler et la preuve, c'est que ça le fatigue. (Marcel Proust)
dedenimes

Messages : 2410
Géo : proche de Nîmes

Dim 10 Fév, 2008 18:17

dedenimes a écrit:je pense que la solution du bat est la plus simple, le lanceur framakey appele le bat qui lui même lance stellarium. Pas besoin de compiler ainsi, et ça reste à la portée du grand public.
Ouais, c'est bat.
Attentyon, ponaytte maychante !
Téthis

Avatar de l’utilisateur
Messages : 3895
Géo : De passage chez les cathares

Sam 16 Fév, 2008 18:46

Bonsoir,

Pour Stellarium, j'ai bien noté la solution du bat, même si je ne suis pas sûr de savoir l'intégrer correctement avec le "format" Framakey.

Je voudrais surtout savoir si quelqu'un à une idée pour le problème de splashscreen pour les autres softs... (suis-je le seul à avoir ce problème en suivant le tuto et en n'utilisant que le pack de portabilisation ?)

Merci
Totoche

Messages : 398
Géo : Drôme / Ardèche

Jeu 21 Fév, 2008 10:56

dedenimes a écrit:je modifie le tuto en mettant l'exemple en rouge, de manière a ce que ca ne se represente plus. Merci d'essuyer les plâtres Totoche :D


Personnellement, je rajouterai textuellement qu'il faut 4 chiffres séparés par des poins ni plus ni moins (si c'est bien cela =) avec un exemple... parce que je pense que les gens continuent à se poser la question :p

Du genre :

Attention: ce champs est un peu spécifique, vous devez entrer une version sous la forme « x.y.z.a » (avec nécessairement 4 nombres séparés par des points) sinon il y aura un problème lors de la création du lanceur. Si la version est par exemple 12.5.32, entrez ici 12.5.32.0

[hr]

Sinon, j'ai un problème un peu similaire à celui du .bat ci-dessus: je voudrais lancer une application pour laquelle un raccourci est utilisé avec un certains nombres de paramètres...

en gros, j'ai la structure:
D:/Apps/PortableAppli/appli.exe
D:/Apps/PortableAppli/script/lanceur

où "lanceur" est un raccourci vers D:/Apps/PortableAppli/appli.exe -option1 -option2 "D:/Apps/PortableAppli/script/lanceur"

Le problème des raccourci windows est que je n'ai pas réussi à les rendre "relatif" : ils sont toujours spécifiés en absolu (donc forcément, ça marche moins bien :/)

Donc existe-il un moyen de spécifier des options au lanceur ? Ou dois-je aussi passer par un .bat ?

Merci :)

Edit: tiens je suis tombé par hasard sur un truc dans le .ini :
"AdditionalParameters"
Ca a l'air de fonctionner quand j'ajoute mes options derrières...
Il y'a une doc sur ce .ini ? :)
SenGa

Messages : 2

Jeu 21 Fév, 2008 12:51

bonjour SenGa, et bienvenu parmi nous.

SenGa a écrit:Personnellement, je rajouterai textuellement qu'il faut 4 chiffres séparés par des poins ni plus ni moins (si c'est bien cela =) avec un exemple... parce que je pense que les gens continuent à se poser la question :p

Du genre :

Attention: ce champs est un peu spécifique, vous devez entrer une version sous la forme « x.y.z.a » (avec nécessairement 4 nombres séparés par des points) sinon il y aura un problème lors de la création du lanceur. Si la version est par exemple 12.5.32, entrez ici 12.5.32.0


en effet, je fais ça dès ce soir, bonne idée, merci beaucoup.

Concernant la doc sur le .ini, il me semble que le fichier est auto-documenté, il n'existe pas d'autre doc sur le sujet, ou alors quelques explications ci ou là dans le forum.

Amicalement
L'homme n'est pas fait pour travailler et la preuve, c'est que ça le fatigue. (Marcel Proust)
dedenimes

Messages : 2410
Géo : proche de Nîmes

Ven 22 Fév, 2008 08:41

Oui, bonjour :x

Toutes mes excuses pour cet oubli :)

Sinon, justement, je n'ai pas trouvé de "vrai" doc pour le .ini

Bon, les noms sont assez explicite, mais comme je n'arrive pas à utiliser AppDataDirectory pour certains appli, je me demandais si c'était parce que je faisais quelque chose de travers ou si c'est juste parce que ce n'est pas utilisable pour toutes les applis :?:
SenGa

Messages : 2

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit