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

.
> aber irgendwo wo es erlaubt ist muss man es speichern.
Hier wirklich entweder die Reg oder AppData.