Portabiliser PureBasic (Windows)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Portabiliser PureBasic (Windows)

Message par cage »

Bonjour a tous,

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:
Image
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"
Le premier paramètre est le fichier setup de PB, le deuxième le dossier où installer la version.

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
Son seul but est de lancer la version voulue de PB en mode portable.

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
Copie écran de l'utilisation de l'application portabiliser-pb.exe
Image

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 première indique dans quelle langue sont définis les 3 fichiers d'aides .chm

La deuxième indique qu'il faut créer un dossier "UserLibraries" dans ""{app}\PureLibraries\"

That's all.

cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Portabiliser PureBasic (Windows)

Message par cage »

Bonjour a tous,

Voici la suite avec une interface graphique pour "portabiliser" n'importe quelle version Windows de PB.

Image

Lancée en mode non admin, l'application permet de rendre portable une version setup de PB.
Idem en mode Admin, mais en plus, permet de créer le dossier Help dans le dossier PureBasic de ProgramFiles et de corriger le problème de non fonctionnement de l'aide PB pour les fonctions API a l'aide de la touche F1 dans l'éditeur PB
Voir le menu Actions-->Créer le dossier Help dans PureBasic et Actions-->Réparer C:\Windows\WinHlp32.exe

Si vous êtes intéressés, je vous laisse découvrir, c'est mieux qu'un long discourt.

Sur le site pbcage.free.fr Menu Mes projets Purebasic/Utilitaires PB

Lien direct : portabiliser-pb

cage
Dernière modification par cage le jeu. 02/sept./2021 16:49, modifié 1 fois.
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Portabiliser PureBasic (Windows)

Message par Ar-S »

Une question me taraude. Il me semble qu'une fois PB installé de façon classique, si on copie le dossier sur une clé il peut être lancé de n'importe ou non ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Portabiliser PureBasic (Windows)

Message par cage »

J'ai du faire le test il y a très longtemps et je ne me rappelle plus vraiment.
J'ai créé cette application pour rendre portable une version quelconque de PB afin de tests sans avoir a l'installer.
Personnellement, j'utilise toujours la dernière version stable de PB pour mes applications (5.73 LTS à ce jour).
Mais avant de l'installer, je la teste avec une version portable pour être sur que mes applications compilent bien.
Par exemple, la version 6.0 me pose problème avec certains types de variable (exemple: UneVariable.l doit être remplacée par UneVariable sans type)
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Demivec
Messages : 90
Inscription : sam. 18/sept./2010 18:13

Re: Portabiliser PureBasic (Windows)

Message par Demivec »

Ar-S a écrit : mer. 25/août/2021 22:37 Une question me taraude. Il me semble qu'une fois PB installé de façon classique, si on copie le dossier sur une clé il peut être lancé de n'importe ou non ?
Tout ce qui est nécessaire est de créer un raccourci qui exécute PureBasic avec le commutateur / PORTABLE.

J'ai un dossier organisé comme suit. Chaque version est présente et pour chaque version il y a un sous-dossier 'x' avec la version 32 bits et un sous-dossier 's' avec la version 64 bits. Tout se fait avec le switch / PORTABLE et a ses propres réglages. Ils pourraient tout aussi bien être copiés et stockés sur une clé USB ou un autre répertoire et exécutés de la même manière.

Code : Tout sélectionner

PureBasic
  +--_Includes
  +--_Templates
  +--_Tools
  +--PureAlpha
  |    s
  +--PureBeta
  |    s
  |    x
  +--v3.81
  +--v3.94
  +--v4.00
  +--v4.02
  +--v4.10
  +--v4.20
  +--v4.31
  +--v4.41
  +--v4.50
  +--v4.51
  +--v4.60
  +--v5.00
  +--v5.11
  +--v5.20L
  |    s
  |    x
  +--v5.21L
  |    s
  |    x
  +--v5.22L
  |    s
  |    x
  +--v5.23L
  |    s
  |    x
  +--v5.24L
  |    s
  |    x
  +--v5.30
  |    s
  |    x
  +--v5.31
  |    s
  |    x
  +--v5.40L
  |    s
  |    x
  +--v5.41L
  |    s
  |    x
  +--v5.42L
  |    s
  |    x
  +--v5.43L
  |    s
  |    x
  +--v5.44L
  |    s
  |    x
  +--v5.45L
  |    s
  |    x
  +--v5.46L
  |    s
  |    x
  +--v5.50
  |    s
  |    x
  +--v5.51
  |    s
  |    x
  +--v5.60
  |    s
  |    x
  +--v5.61
  |    s
  |    x
  +--v5.62
  |    s
  |    x
  +--v5.70L
  |    s
  |    x
  +--v5.71L
  |    s
  |    x
  +--v5.72L
  |    s
  |    x
  +--v5.73L
  |    s
  |    x
J'ai un ensemble de huit raccourcis qui s'exécutent en 32 bits ou 64 bits pour la dernière version, la version LTS, la version bêta ou un raccourci personnalisé qui est modifié pour exécuter n'importe quelle ancienne version.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Portabiliser PureBasic (Windows)

Message par Kwai chang caine »

Pour moi aussi la gestion de PB a toujours été simple
Comme le dit ARS, le prends le dossier décompilé, je le nomme "v5.xx" et hop dans un dossier nommé PB
J'utilise comme le dit DEMIVEC le "/PORTABLE" et ça marche toujours nickel
D'ailleurs c'est une des raisons qui me fait l'adorer, simple comme j'aime
Et c'est l'une des raisons qui me font détester pas mal d'autres, ou il manque toujours "cake" chose, une dll, un framework, etc ...

Mais merci de ton partage quoi qu'il en soit 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
ChrisR
Messages : 221
Inscription : sam. 14/févr./2015 16:20

Re: Portabiliser PureBasic (Windows)

Message par ChrisR »

Comme Cage, j'utilise innounp, the Inno Setup Unpacker
puis j'utilise ce batch

Code : Tout sélectionner

innounp.exe -x -b -a -d"%~dp0\PureBasic_Files" "%~dp0\PureBasic_Windows_alpha_3_X64_6_00_(cyzxrr).exe"
md "%~dp0\PureBasic_Files\{App}\PureLibraries\UserLibraries"
Ensuite plutôt qu'un raccourci, je crée PureBasic_portable.exe avec cette simple ligne de code

Code : Tout sélectionner

RunProgram(GetPathPart(ProgramFilename()) + "PureBasic.exe", "/PORTABLE", GetPathPart(ProgramFilename()) + "\")
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Portabiliser PureBasic (Windows)

Message par cage »

Bonjour,

Télécharger les sources : portabiliser-pb_sources.7z

Visualiser le contenu des sources : portabiliser-pb.html

Les sources contiennent 2 projets:

1) portabiliser-pb-ui.pbp qui est l'interface graphique de l'application

2) PureBasic.Portable.pbp qui génère le fichier PureBasic.Portable.exe qui est copié dans le dossier PB portable.

Cet exécutable permet de lancer Purebasic en mode portable

Code PureBasic.Portable.pb

Code : Tout sélectionner

EnableExplicit

OnErrorGoto(?ErrorHandler)

Global AppPath$ = GetPathPart(ProgramFilename())

SetCurrentDirectory(AppPath$)

RunProgram("PureBasic.exe", "/PORTABLE", AppPath$)

ErrorHandler:

End

Cette application permet d'automatiser tout le processus sans avoir a installer Purebasic et sans avoir a taper une seule ligne de commande.

Si l'un de vous a le courage de tester et de me dire ce qu'il en pense, ce serait vraiment cool.

cage
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre