EXE einmal Konfigurieren und dann nie wieder...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Oliver1994
Beiträge: 321
Registriert: 15.06.2008 21:52

EXE einmal Konfigurieren und dann nie wieder...

Beitrag von Oliver1994 »

Hallo,

hab folgendes Problem:

Ich will mit PB eine EXE erstellen die man beim ersten Start konfiguriert, die dann die Einstellungen für IMMER in der EXE aufbewahrt. Ohne Recourcen ohne EXTERNE Programm so das jeder sie individuell Konfigurieren kann!

Geht so etwas?

Gruß

JENS

PS: Zu nut kann man bei der Konfirguration auch Recourcen gebrauchen aber danach nie wieder...
Ronny S.
Beiträge: 73
Registriert: 24.11.2008 16:08

Beitrag von Ronny S. »

Möglich wäre es was an das Ende anzufügen, sofern Rechte vorhanden sind, nur sowas macht niemand wirklich.
Programmkonfigurationen schreibt eventuell noch in die Registry wenn man kein weiteres File wie eine config.ini möchte.
Gibt es einen besonderen Grund warum Du das so machen möchtest?
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Registry ist für kleinere Programme absolut verboten!
Am Besten also die Einstellungen im AppPath abspeichern.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

c4s hat geschrieben:Registry ist für kleinere Programme absolut verboten!
ich schreibe ja auch ungern in die Registry, aber sorry, diese Aussage ist
ziemlich unsinnig. Wer sollte das verboten haben? Und dürfen Deiner Logik
folgend dann nur 'größere' Programme in die Registry schreiben? Und
warum dürfen kleine Programme es nicht und größere Programme schon?
c4s hat geschrieben:Am Besten also die Einstellungen im AppPath abspeichern.
auch hier: Einspruch! Einstellungen gehören korrekterweise in den
Anwendungsdaten-Ordner des jeweiligen Benutzers.

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

meines wissens ist es nicht möglich, in das file einer laufenden exe zu schreiben.
außerdem dürfen programme mit normalen rechten gar nicht in ihr eigenes verzeichnis schreiben.

Registry oder Appdata wäre der korrekte platz um einstellungen zu speichern.
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

Du meinst es wohl umgekehrt.
Für jeden konfigurierbaren Wert kannst Du zunächst einen Defaultwert in der *.exe definieren.
Nach der Konfiguration schreibt die Exe eben eine Einstellungsdatei.
Diese wird im Pfad des jeweiligen Nutzers abgelegt und überschreibt die Defaultwerte.
Oder was willst Du sonst?
gruß
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

da gabs mal was im CodeArchiv, gibs wohl nicht mehr ... naja ist ja auch
schon uralt ... also so nicht lauffähig:

Code: Alles auswählen

; www.purearea.net (Sourcecode collection by cnesm) 
; Author: Mischa 
; Date: 22. November 2003 

Procedure.s MainPart(Text.s) 
  ;Simple text-Box 
  OpenWindow(0, 0, 0, 240, 160, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Notes") 
  CreateGadgetList(WindowID()) 
  StringGadget(0, 5, 5, 230, 150, Text, #ES_MULTILINE | #WS_VSCROLL | #WS_HSCROLL | #ES_AUTOHSCROLL | #ES_AUTOVSCROLL) 
  Repeat 
  Until WaitWindowEvent() = #PB_EventCloseWindow 
  ProcedureReturn GetGadgetText(0) 
EndProcedure 


;Get program and temp-folder name 
program.s =  Space(1000) 
GetModuleFileName_(0, program, 1000) 
temp.s =  Space(1000) 
GetTempPath_(1000, temp) 

;Construct Clone-Name 
clone.s =  temp + "_" + GetFilePart(program) 


;Check mode by parameter 
mode.s = ProgramParameter() 
If mode = "clone" ;I am the clone 
  ;Check if another instance is running (cause makes no sense here) 
  Mutex = CreateMutex_(0, 1, "Mischas Notes") 
  Error = GetLastError_() 
  If Mutex < >0 And Error = 0 
    program = ProgramParameter() 
    Size = FileSize(program) 
    
    ReadFile(0, program) 
    FileSeek(Size - 12) 
    If ReadLong() = 1234321 ;this is a sign for us that there are resources inside 
      Size = ReadLong() 
      resourcesize = ReadLong() 
      FileSeek(Size) 
      *res = AllocateMemory(resourcesize) 
      ReadData(*res, resourcesize) 
      resource.s = PeekS(*res) 
    EndIf 
    FileSeek(0) 
    *header = AllocateMemory(Size) 
    ReadData(*header, Size) ;Put the small main-program in the pocket (alternate do this in the end) 
    CloseFile(0) 
    
    newtext.s = MainPart(resource) ;The main-program 
    
    If newtext  < >resource ;Ok, now we construct new program with new resources 
      resourcesize = Len(newtext)  + 1 
      *res = AllocateMemory(resourcesize) 
      PokeS(*res, newtext) 
      SetFileAttributes_(program, #FILE_ATTRIBUTE_NORMAL) ;maybe its write-protected 
      
      CreateFile(1, program) 
      WriteData(*header, Size) ;program-part 
      WriteData(*res, resourcesize) ;resource-part 
      WriteLong(1234321) ;Our sign 
      WriteLong(Size) ;Adress of resources 
      WriteLong(resourcesize) ;Size of resources 
      CloseFile(1) 
    EndIf 
    RunProgram(program, "killclone", "", 0) 
  EndIf 
  CloseHandle_(Mutex) 
ElseIf mode = "killclone" ;Delete clone of program 
  Sleep_(500) 
  DeleteFile(clone) 
Else ;normal mode 
  ;Create and start clone 
  If FileSize(clone) =  - 1 
    CopyFile(program, clone) 
  EndIf 
  RunProgram(clone, "clone " + Chr(34)+program + Chr(34), "", 0) 
EndIf 
End
In wie weit man dafür Rechte braucht in den entsprechenden
Betriebssystemen kann ich nicht sagen.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

> Nach der Konfiguration schreibt die Exe eben eine Einstellungsdatei.
Er möchte ja irgendwie keine Einstellungsdatei.
Win11 x64 | PB 6.20
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

>> Nach der Konfiguration schreibt die Exe eben eine Einstellungsdatei.
> Er möchte ja irgendwie keine Einstellungsdatei.

aber gerade das ist ja der knackpunkt.
irgendwo hin müssen die einstellungen ja rückgeschrieben werden,
und aufs eigene verzeichnis gibt es inzwischen keine berechtigung mehr,
und auf die eigene exe schon lange nicht.

man kann die benögtigte info so kurz wie möglich halten,
also wenn jede einstellungsmöglichkeit vier zustände hat,
kann man in einem Long sechzehn Eigenschaften fläggen,
also je nachdem würde ein einziges Feld in der Registry genügen...

aber irgendwo wo es erlaubt ist muss man es speichern.

wobei ich mich allerdings frage, was dagegen spricht ein winziges binary file in User\Appdata\ abzulegen...
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

>wobei ich mich allerdings frage, was dagegen spricht ein winziges binary file in User\Appdata\ abzulegen...

Eben. Vielleicht braucht er ein Super-Leise-Programm, das der Anwender
nicht bemerken soll :freak: .

> aber irgendwo wo es erlaubt ist muss man es speichern.
Hier wirklich entweder die Reg oder AppData.
Win11 x64 | PB 6.20
Antworten