Le sujet a déjà été plusieurs fois abordé, mais je voulais apporter ma pierre a l'édifice.
Prérequis pour portabiliser (rendre portable) une ou plusieurs versions de PureBasic
1) télécharger les fichiers d'installation des versions que l'on souhaite rendre portables
2) télécharger l'utilitaire ligne de commande innounp, the Inno Setup Unpacker
3) définir où installer (copier) les versions portabilisées
4) définir une norme de nommage pour les différents dossiers
Pour ma part, j'utilise le dossier C:\PB dans le disque système C:\
Pour les dossiers des différentes versions de PB, j'utilise la norme suivante:
PB-5.71-32 pour la version 5.71 LTS 32-bit de PB
PB-5.71-64 pour la version 5.71 LTS 64-bit de PB
PB-5.73-32 pour la version 5.73 LTS 32-bit de PB
PB-5.73-64 pour la version 5.73 LTS 64-bit de PB
etc...
Copie écran du dossier C:\PB pour clarifier les choses:
Le dossier C:\PB contient les éléments suivants:
Les dossiers des versions PB portables
Les dossier X64 et X86 qui contiennent les versions 64-bit et 32-bit des applications PB compilées.
Un raccourci vers le dossier C:\Users\%UserName%\AppData\Roaming\PureBasic qui contient les paramètres de PB ( History.db, PureBasic.prefs, Templates.prefs et Tools.prefs)
innounp50.exe et innounp50.htm (j'ai rajouté le numéro de version a ces 2 fichiers)
Les fichiers PureBasic (.pbp, .pb, .ico, .exe)
Les fichiers d'installation des versions PB que l'on souhaite rendre portables
Les raccourcis internet vers différents sites utiles pour ce projet.
Pour portabiliser une version de PB, j'ai développé une petite application en mode console.
L'application portabiliser-pb.exe s'utilise dans une fenêtre Invite de commande de la manière suivante:
Code : Tout sélectionner
portabiliser-pb.exe "PureBasic_Windows_X64_LTS_5.71.exe" "PB-5.71-64"
J'ai aussi écris une application PureBasic.exe.Portable.exe a copier dans chaque dossier des versions portables.
Voici le code de l'application PureBasic.exe.Portable.pb:
Code : Tout sélectionner
;************************************************************************
;Titre : PureBasic.exe.Portable.pb
;Auteur : (C) 2021 CAGE
;Date : 2021/03/25
;Version PB : PureBasic 5.73 LTS (Windows - x86)
;Version PB : PureBasic 5.73 LTS (Windows - x64)
;Compiler Options
;Compiler Options : Executable format: Windows
;Compiler Options : Enable moderm theme support (for Windows X and above)
;Compile/Run : Create temporary executable in the source directory
;
;Libairies: aucunes
;
;************************************************************************
;
EnableExplicit
OnErrorGoto(?ErrorHandler)
Global AppPath$ = GetPathPart(ProgramFilename())
SetCurrentDirectory(AppPath$)
RunProgram("PureBasic.exe", "/PORTABLE", AppPath$)
ErrorHandler:
End
Voici le code de l'application principale portabiliser-pb.pb
Code : Tout sélectionner
;************************************************************************
;Titre : portabiliser-pb.pb
;Auteur : (C) 2021 CAGE
;Date : 2021/03/25
;Version PB : PureBasic 5.73 LTS (Windows - x86)
;Version PB : PureBasic 5.73 LTS (Windows - x64)
;Compiler Options
;Compiler Options : Executable format: Console
;Compiler Options : Enable moderm theme support (for Windows X and above)
;Compile/Run : Create temporary executable in the source directory
;
;Libairies: aucunes
;
;************************************************************************
;
EnableExplicit
OnErrorGoto(?ErrorHandler)
Global AppPath$ = GetPathPart(ProgramFilename())
SetCurrentDirectory(AppPath$)
Procedure fileExist(f$)
If FileSize(f$) < 0
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
Procedure.a folderExist(f$)
If FileSize(f$) = -2
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Define count = CountProgramParameters()
Define source.s, folder.s, key.s
If count = 2
source = ProgramParameter(0)
folder = ProgramParameter(1)
Debug source
Debug folder
Else
OpenConsole()
PrintN(#Null$)
PrintN(" Ligne de commande: portabiliser-pb.exe <"+Chr(34)+"source"+Chr(34)+"> <"+Chr(34)+"dossier"+Chr(34)+">")
PrintN(#Null$)
CloseConsole()
End
EndIf
folder = Trim(UCase(folder))
folder = ReplaceString(folder, " ", "-")
OpenConsole()
ClearConsole()
PrintN(#Null$)
If Not fileExist(source)
PrintN(" Le fichier source <"+source+"> n'existe pas.")
PrintN(#Null$)
End
EndIf
If folderExist(folder)
PrintN(" Le dossier destination <"+folder+"> existe déjà.")
PrintN(#Null$)
PrintN(" !!! Attention !!!, si vous continuez, le contenu de ce dossier sera entierement effacé.")
PrintN(#Null$)
Print(" Continuer et utiliser le dossier existant "+folder+" (O/N) : ")
Repeat
key = UCase(Inkey())
Select key
Case "O"
PrintN("O")
PrintN(#Null$)
If DeleteDirectory(folder, "*.*", #PB_FileSystem_Recursive|#PB_FileSystem_Force)
Break
Else
PrintN(#Null$)
PrintN(" Impossible d'effacer le dossier destination "+folder)
PrintN(#Null$)
End
EndIf
Case "N" : PrintN("N") : PrintN(#Null$) : End
Default : Delay(20)
EndSelect
ForEver
Else
PrintN(" Le dossier destination <"+folder+"> n'existe pas.")
PrintN(#Null$)
PrintN(" Création du dossier destination "+folder)
PrintN(#Null$)
If CreateDirectory(folder)
DeleteDirectory(folder, "*.*", #PB_FileSystem_Force)
Else
PrintN(" Impossible de créer le dossier destination "+folder)
PrintN(#Null$)
End
EndIf
EndIf
RunProgram("innounp50.exe", "-x -y -q -b -d"+AppPath$+" "+source, AppPath$, #PB_Program_Wait)
PrintN(#Null$)
If folderExist("{app}")
RenameFile("{app}", folder)
RenameFile("install_script.iss", folder+"\install_script.iss")
CopyFile("PureBasic.exe.Portable.exe", folder+"\PureBasic.exe.Portable.exe")
CreateDirectory(folder+"\Help")
CreateDirectory(folder+"\PureLibraries\UserLibraries")
CopyFile(folder+"\PureBasic,1.chm", folder+"\Help\PureBasicEN.chm")
CopyFile(folder+"\PureBasic,2.chm", folder+"\Help\PureBasicFR.chm")
CopyFile(folder+"\PureBasic,3.chm", folder+"\Help\PureBasicGE.chm")
Print(" Installer l'aide en Anglais(1), Français(2), Allemand(3) - Votre choix (1/2/3): ")
Repeat
key = UCase(Inkey())
Select key
Case "1" : PrintN("1") : CopyFile(folder+"\PureBasic,1.chm", folder+"\PureBasic.chm") : Break
Case "2" : PrintN("2") : CopyFile(folder+"\PureBasic,2.chm", folder+"\PureBasic.chm") : Break
Case "3" : PrintN("3") : CopyFile(folder+"\PureBasic,3.chm", folder+"\PureBasic.chm") : Break
Default : Delay(20)
EndSelect
ForEver
PrintN(#Null$)
DeleteFile(folder+"\PureBasic,1.chm", #PB_FileSystem_Force)
DeleteFile(folder+"\PureBasic,2.chm", #PB_FileSystem_Force)
DeleteFile(folder+"\PureBasic,3.chm", #PB_FileSystem_Force)
Define basic.s = "C:\Users\"+UserName()+"\AppData\Roaming\PureBasic\PureBasic.prefs"
Define tools.s = "C:\Users\"+UserName()+"\AppData\Roaming\PureBasic\Tools.prefs"
If fileExist(basic.s)
Print(" Copier le fichier PureBasic.prefs de "+UserName()+" (O/N): ")
Repeat
key = UCase(Inkey())
Select key
Case "O" : PrintN("O") : CopyFile(basic.s, folder+"\PureBasic.prefs") : Break
Case "N" : PrintN("N") : PrintN(#Null$) : Break
Default : Delay(20)
EndSelect
ForEver
EndIf
If fileExist(tools.s)
Print(" Copier le fichier Tools.prefs de "+UserName()+" (O/N): ")
Repeat
key = UCase(Inkey())
Select key
Case "O" : PrintN("O") : CopyFile(tools.s, folder+"\Tools.prefs") : Break
Case "N" : PrintN("N") : PrintN(#Null$) : Break
Default : Delay(20)
EndSelect
ForEver
EndIf
EndIf
CloseConsole()
ErrorHandler:
End
Les actions suivantes sont réalisées:
Extraction du contenu du fichier d'installation dans le dossier "{app}"
Le dossier "{app}" est renommé avec le nom souhaité.
Le fichier "install_script.iss" est déplacé dans le dossier de l'application.
Le dossier "Help" est créé dans le dossier de l'application.
Le dossier "UserLibraries" est créé dans le dossier "PureLibraries" de l'application.
Le fichier "Purebasic,1.chm" est copié dans le dossier "Help" en "PurebasicEN.chm"
Le fichier "Purebasic,2.chm" est copié dans le dossier "Help" en "PurebasicFR.chm"
Le fichier "Purebasic,3.chm" est copié dans le dossier "Help" en "PurebasicGE.chm"
Le fichier "Purebasic.chm" est créé en fonction du choix de l'utilisateur 1, 2 ou 3
Les fichiers de préférences de PB sont copiés dans le dossier de l'application en fonction des réponses (O/N)
Tout le contenu du dossier C:\PB peut-être copié sur un disque externe ou une clé USB pour être utilisé sur un autre PC.
Pour les plus curieux d'entre vous, regardez le contenu du fichier "install_script.iss"
2 choses intéressantes:
Code : Tout sélectionner
Source: "{app}\PureBasic,1.chm"; DestDir: "{app}"; DestName: "PureBasic.chm"; Components: english; Flags: ignoreversion
Source: "{app}\PureBasic,2.chm"; DestDir: "{app}"; DestName: "PureBasic.chm"; Components: french; Flags: ignoreversion
Source: "{app}\PureBasic,3.chm"; DestDir: "{app}"; DestName: "PureBasic.chm"; Components: german; Flags: ignoreversion
[Dirs]
Name: "{app}\PureLibraries\UserLibraries";
La deuxième indique qu'il faut créer un dossier "UserLibraries" dans ""{app}\PureLibraries\"
That's all.
cage