Ein in PureBasic geschriebenes Programm richtig Installieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Ein in PureBasic geschriebenes Programm richtig Installieren

Beitrag von tft »

Hallo,

ich möchte mein PureBasic Programm unter W8 richtig Installieren, bekomme es aber nicht von PB aus
in das Richtige Verzeichnis Kopiert. Könnte hier fielleicht jemand mit der entsprechenden Erfahrung
mal Posten wie man das Richtig macht. Ich weis das es Installer gibt. Die möchte ich aber nicht verwenden.
Mein Englisch ist scheisse ....... also kommt MSDN für mich nicht wirklich in frage. Und für alles andere
gibt es PureArena.net. Ich weis zum Beispiel das man für den zugriff auf bestimmte verzeichnisse Admin rechte
braucht, Das Programme ins Programm Files verzeichniss gehören und Daten ins Appdata. Aber im Tray and forget
verfahren das experimentell rauszufinden halte ich für unevektiv.

Danke im voraus ... TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von Danilo »

Ins Programme-Verzeichnis dürfen nur Programme schreiben, die Admin-Rechte haben.
Diese forderst Du an, indem Du die entsprechende Compileroption setzt: "[X] Request Administrator mode for Windows Vista and above".

Für Dein Endprodukt musst Du das nicht machen, nur für Deinen eigenen Installer/Kopierer.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
HeX0R
Beiträge: 3056
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von HeX0R »

Wieso nimmst Du nicht den Installer von Thorsten?

Man muss ja nicht immer das Rad neu erfinden und das Teil ist schön übersichtlich und einfach zu handhaben.
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von tft »

Hallo,

danke für die Info.... so einfach kann das manchmal sein ....

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von tft »

Wärend der Entwicklung und den Tests auf anderen Rechnern, wo ich genau weis wo was hinkommt,
brauche ich keinen so tollen Installer. Ich verwende im Moment diese total abgespeckte Version eines
Installers. Bitte nicht mit Granit blöcken werfen :-)

Code: Alles auswählen

;
; Anim Player Installer
;


EnableExplicit

Global ExeName.s = "AnimPlayer.exe" , TargetPfad.s = "AnimPlayer"

Declare createShellLink(obj.s, lnk.s, arg.s, desc.s, dir.s, icon.s, index)
Declare.s getSpecialFolder(id)
Declare SetUninstall(keyname$, GUID$, name$,  pub$, url$, email$, dicon$, uexe$) 

Procedure.s SpecialFolderLocation(csidl.l)
   Protected location.s,pidl.l
   If SHGetSpecialFolderLocation_(#Null,csidl,@pidl)=#ERROR_SUCCESS
      location.s=Space(#MAX_PATH)
      If SHGetPathFromIDList_(pidl,@location.s)
         If Right(location.s,1)<>""
            location.s+""
         EndIf
      EndIf
      If pidl
         CoTaskMemFree_(pidl) ; Instead of messing with com imalloc free and whatnot.
      EndIf
   EndIf
   ProcedureReturn Trim(location.s)
 EndProcedure
Procedure.s getSpecialFolder(id)
  Protected path.s, *ItemId.ITEMIDLIST
 
  *itemId = #Null
  If SHGetSpecialFolderLocation_(0, id, @*ItemId) = #NOERROR
    path = Space(#MAX_PATH)
    If SHGetPathFromIDList_(*itemId, @path)
      If Right(path, 1) <> "\"
        path + "\"
      EndIf
      ProcedureReturn path
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
Procedure createShellLink(obj.s, lnk.s, arg.s, desc.s, dir.s, icon.s, index)
  ;obj - path to the exe that is linked to, lnk - link name, dir - working
  ;directory, icon - path to the icon file, index - icon index in iconfile
  Protected hRes.l, mem.s, ppf.IPersistFile
  CompilerIf #PB_Compiler_Unicode
    Protected psl.IShellLinkW
  CompilerElse
    Protected psl.IShellLinkA
  CompilerEndIf

  ;make shure COM is active
  CoInitialize_(0)
  hRes = CoCreateInstance_(?CLSID_ShellLink, 0, 1, ?IID_IShellLink, @psl)

  If hRes = 0
    psl\SetPath(Obj)
    psl\SetArguments(arg)
    psl\SetDescription(desc)
    psl\SetWorkingDirectory(dir)
    psl\SetIconLocation(icon, index)
    ;query IShellLink for the IPersistFile interface for saving the
    ;link in persistent storage
    hRes = psl\QueryInterface(?IID_IPersistFile, @ppf)

    If hRes = 0
      ;CompilerIf #PB_Compiler_Unicode
        ;save the link
        hRes = ppf\Save(lnk, #True)
;       CompilerElse
;         ;ensure that the string is ansi unicode
;         mem = Space(#MAX_PATH)
;         MultiByteToWideChar_(#CP_ACP, 0, lnk, -1, mem, #MAX_PATH)
;         ;save the link
;         hRes = ppf\Save(mem, #True)
;       CompilerEndIf
      ppf\Release()
    EndIf
    psl\Release()
  EndIf

  ;shut down COM
  CoUninitialize_()

  DataSection
    CLSID_ShellLink:
    Data.l $00021401
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    IID_IShellLink:
    CompilerIf #PB_Compiler_Unicode
      Data.l $000214F9
    CompilerElse
      Data.l $000214EE
    CompilerEndIf
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
    IID_IPersistFile:
    Data.l $0000010b
    Data.w $0000,$0000
    Data.b $C0,$00,$00,$00,$00,$00,$00,$46
  EndDataSection
  ProcedureReturn hRes
EndProcedure


OpenWindow(0,0,0,200,100,"test")

Global obj.s, lnk.s, prg.s, app.s, fil.s, zpf.s

obj = GetCurrentDirectory()+ExeName.s 
lnk = getSpecialFolder(#CSIDL_DESKTOPDIRECTORY) + "Anim Player.lnk"
prg = getSpecialFolder(#CSIDL_PROGRAM_FILES)
app = getSpecialFolder(#CSIDL_APPDATA)
fil = getSpecialFolder(#CSIDL_PROGRAMS)

zpf=prg+TargetPfad.s

Debug obj
Debug lnk
Debug prg
Debug app
Debug fil
Debug zpf

Debug "---"

Debug "Copy files from "+GetCurrentDirectory()
Debug "Copy files to   "+zpf

If CopyDirectory(GetCurrentDirectory(), zpf, "", #PB_FileSystem_Force    ) =0
  Debug "Konnte daten nicht kopieren"
EndIf


;Create Icon on Desktop
Debug "---"
Debug "Create ShellLink"
If CreateShellLink(zpf+"\"+ExeName.s , lnk,"","Lets Play Anime",zpf ,zpf+"\"+ExeName.s  ,0) = 0
  Debug "Icon auf den Desktop plaziert"
Else
  Debug "Konte keinen ShellLink erzeugen"
EndIf 



Wenn mein Anime Player dann mal fertig ist. Werde ich natürlich auch einen Installer brauchen. Und dann ist
von Thomas natürlich erste wal.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von NeoChris »

@HeX0R
Aber sieht nicht so professionel aus. Da mag ich die Optik von anderen Setups besser wie Inno Setup. ;)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von ts-soft »

@tft

Dein jetziger Installer ermöglicht aber keinerlei Auswahl des Users :wink:
Und dran denken, Admin-Modus in den CompilerOptionen anzufordern!

PS: Wenn Du GetCurrentDirectory() nutzt, solltest Du auch sicherstellen das CurrentDirectory festzulegen!
Meist wird dies der Explorer für Dich erledigen, aber nicht jeder nutzt diesen. Bei Alternativen Shells ist
CurrentDirectory evtl. nicht gesetzt und zeigt in Nirwana (z.B. nach c:\windows\).
Also besser setzen mit:

Code: Alles auswählen

SetCurrentDirectory(GetPathPart(ProgramFilename()))
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3056
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von HeX0R »

NeoChris hat geschrieben:@HeX0R
Aber sieht nicht so professionel aus. Da mag ich die Optik von anderen Setups besser wie Inno Setup. ;)
Naja, das habe ich auch nicht behauptet, aber es tut was es soll und das ohne große Einarbeitung.
Für kleinere Tools durchaus eine Alternative.

Mal davon abgesehen benötigt man nach einem professionellen Installer auch ein professionelles Produkt, alles andere ist ja dann wieder ... unprofessionell ;)
Benutzeravatar
tft
Beiträge: 650
Registriert: 08.09.2004 20:18
Computerausstattung: GFX 3060 Ti , i7 12700F , 32 GB Ram , 900 GB SSD , TV
Wohnort: Dachsen
Kontaktdaten:

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von tft »

Hallo,

"es tut was es soll." das ist genau das was ich meinte. Im Moment benötige ich einfach einen Quick
Installer der ein Programm ordnungsgemäss ins System integriert. Im Moment mache ich nur folgendes.

Ich Kopiere das Programm in den Programm Ordner ( Mit Adminrechten über den Compiler )
und setze ein Icon auf den Desktop.

Ich möchte aber noch das eine UnInstaller in das Sytem eingetragen wird. Und da weis ich noch nicht
wie das genau geht. Einträge in die Registrie sind sicher nötig. Aber bissher habe ich das unter W8
noch nicht geschafft und weis eigentlich auch nicht genau was die MSDN für eine Richtliene vorgibt
was ein Ordnungs gemässer Installer alles so machen muss.

Also wenn Ihr noch andere dinge darüber wisst , immer her damit. Das kann man ja dann auch für
die User hier als Sticki festnageln falls intresse besteht

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , CH-Dachsen/DE-Berlin/TR-Antalya
Mein Projekt (Driving School Evergarden)
Codes bei (GitHub) Videos von (YouTube)
Treffen via Discord: Einladung

PB 6.10 | W11 | i7 12700F | 32 GB Ram | RTX 3060 Ti | 60 Herz -TV FullHD
ARDUINO Freak | Sprecher | Game Dev. | Geschichten Erzähler :-)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Beitrag von ts-soft »

Ein Uninstaller ist eine gefährliche Sache! Das sollte man besser den spezialisierten Programmen überlassen, und zwar weil es dabei
schon zu sehr vielen Fehlern gekommen ist. Zum Beispiel hat ein User "ProgramFiles" anstatt "ProgramFiles/Das Programm"
ausgewählt. Das alleine macht ja nichts aus, aber wenn das Programm deinstalliert wird, wird alles in "ProgramFiles" gelöscht, das
heißt keine Programme mehr :mrgreen:

So ist es vor ein paar Jahren wirklich passiert, bei einem bekannten Programm!

Wenn Du aber tatsächlich so einen Uninstaller bei Deinem Programm mitliefern willst, obwohl der garnichts mit Deinem Programm zu tun hat, siehe hier:
http://www.purebasic.fr/english/viewtop ... 50#p202914

Ich sehe da keinen Sinn drinn, das jetzt monatelang auszutesten, damit es evtl. doch nicht fehlerfrei ist, aber ist Deine Sache,
Hauptsache mit jubelt keiner das Programm zum testen unter :mrgreen:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten