Seite 1 von 5

EXE einmal Konfigurieren und dann nie wieder...

Verfasst: 30.01.2009 23:19
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...

Verfasst: 30.01.2009 23:29
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?

Verfasst: 31.01.2009 00:04
von c4s
Registry ist für kleinere Programme absolut verboten!
Am Besten also die Einstellungen im AppPath abspeichern.

Verfasst: 31.01.2009 00:24
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

Verfasst: 31.01.2009 00:28
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.

Verfasst: 31.01.2009 00:53
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

Verfasst: 31.01.2009 01:00
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

Verfasst: 31.01.2009 12:23
von Andesdaf
> Nach der Konfiguration schreibt die Exe eben eine Einstellungsdatei.
Er möchte ja irgendwie keine Einstellungsdatei.

Verfasst: 31.01.2009 12:48
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...

Verfasst: 31.01.2009 12:51
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.