Seite 1 von 2

Ein in PureBasic geschriebenes Programm richtig Installieren

Verfasst: 25.02.2015 08:01
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

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 08:50
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.

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 09:20
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.

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 09:21
von tft
Hallo,

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

Gruss TFT

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 09:32
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

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 10:53
von NeoChris
@HeX0R
Aber sieht nicht so professionel aus. Da mag ich die Optik von anderen Setups besser wie Inno Setup. ;)

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 12:08
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

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 25.02.2015 21:00
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 ;)

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 26.02.2015 11:42
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

Re: Ein in PureBasic geschriebenes Programm richtig Installi

Verfasst: 26.02.2015 12:16
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