[VB6] exe als output tijdens runnen (geen package & deploym)

Pagina: 1
Acties:

  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
Ik heb hier een stuk code wat een random gevuld tekstbestand aanmaakt op een locatie die je zelf kiest (mbv CommonDialog). De bedoeling is echter dat er een exe gemaakt wordt waarin staat dat dit txtbestand wordt gekopieerd naar c:\programfiles\....

Het probleem is echter dat de eindgebruiker dit tekstbestand niet mag zien. Ik zou het bestand wel een andere naam kunnen geven, met een onbekende extentie, maar dat is ook niet echt ok vind ik.

Ik zou wel een 2de project kunnen maken waar ik dan het tekstbestand aanduid, en daarachter de andere opdrachten zet (zoals kopieren, ...). Maar dan moet ik nog 'handmatig' een exe maken mbv package & deployment wizard, of een andere tool.

Ik heb dus liever 1 project waar ik kan aangeven op welke plaats mijn exe wordt gemaakt & waar alle opdrachten in staan.

Ik hoop dat het een beetje duidelijk is, kan het zelf moeilijk uitleggen. Anders zal ik nog wat extra info proberen te geven

edit: dit is eigenlijk een compiler maken lijkt me, misschien niet zo simpel. Dan zou ik misschien toch beter mijn txt apart maken & vervolgens een 2de project aanmaken. En dan met inno setup een exe aanmaken, daar krijg je toch maar 1 exe als output in tegenstelling tot de package & deployment wizard.

[ Voor 15% gewijzigd door mmy841 op 12-08-2005 11:08 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-05 13:49

Janoz

Moderator Devschuur®

!litemod

Wat wil je nu eigenlijk? Je kunt toch gewoon de code van de CommonDialog vervangen door een bestands locatie? Waarom heb je dan een tweede executable nodig?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
nee, het nieuwe licentiebestand maken wij hier aan. Dit (in een exe) sturen we door naar iemand anders, die dit maar 1x kan uitvoeren. Daarna wordt ook de exe terug verwijderd. Op die manier krijgt die 2de persoon maar 1x een nieuwe kans.

Anders zou hij de exe opnieuw kunnen uitvoeren & opnieuw een licentie (proberen) in te geven. Indien dat weer niet lukt, terug de exe uitvoeren & terug proberen...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-05 13:49

Janoz

Moderator Devschuur®

!litemod

Jullie hebben nu dus een tootlje die een txt bestandje genereerd, maar jullie willen een tooltje die een executable genereert die dat textbestandje embedded heeft en deze wegschrijft op een door jullie bepaalde plek en vervolgens zichzelf verwijderd?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
klopt (eventueel nog hernoemen,... maar als dat met VB code gaat is dat geen probleem)

Verwijderd

Exe maken door een gemaakte exe kan niet. Of je moet een compiler gaan bouwen. Waarom versleutel je het bestandje niet gewoon? Dan is het bestandje onleesbaar en dan kan de gewone applicatie of het installatieprogramma het bestandje verwijderen.

Verwijderd

Dim string locatie
Dim string inhoud


inhoud = "c:\windows\temp$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
inhoud = "768456489478454867845489765145679874564" 'deze zal wel fixed length hebben


-> dat heb je in je EXE die je wilt genereren. Maar ipv te genereren, compile je die gewoon in je VB studio.

Dan heb je als output een exe die 768.. naar c:\windows\temp schrijft
de $$$ zijn opvul tekens, die moet je maar in je exe eruit filteren


dat is stap 1

dan maak je een nieuwe applicatie 'die de bovenstaande exe gaat genereren'
vervang genereren door schrijven ;)
je leest de 1ste exe in, zodat je de binary data in een byte array kan stoppen. (schrijf eventueel hier nog een tooltje voor, dat je een keer kunt gebruiken)

dan zet je in je code

Dim bytes() as byte
bytes(0) = 1
bytes(1)=255
bytes(2)=264

ENZOVOORT
nu is het zo dat tekst in een exe gewoon veranderd kan worden als die door VB gemaakt is.
Dus je zoekt waar de offset in de 1ste exe staat (die van de c:\windows\temp en die van de 768...)
je weet de lengte die je gebruikte in die exe, dus dat weet je dan ook

en dan ga je gewoon de string gaan schrijven in de juiste offset
bytes(905) = 98 'dit is dan de eerste letter van je locatie, als de offset 905 is...
enzovoort

uiteindelijk heb je een binary array (of meerdere als het groter is, je ziet maar, je kan ook string gebruiken ofzo, whatever)

die array is dan eigenlijk de inhoud van je EXE, met de veranderde data erin
en dan schrijf je die naar een file ding.exe


en tata, daar heb je je 'gegenereerde' exe B)


natuurlijk compleet onzinnig, maar dit is een oplossing voor jouw wens

  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
Denk dat ik het zo maar ga doen: de exe laten uitvoeren die het tekstbestand aanmaakt op de juiste plaats en dan de andere software direct laten opstarten. Bij het opstarten van de andere software wordt de exe dan direct verwijderd. Maar hoedanook, als de eindgebruiker een copie maakt voor hij de exe uitvoert heeft hij nog altijd een backup.

Zal er nog wel eens over nadenken. Bedankt voor de reacties.

(edit: tekst herformuleren)

[ Voor 5% gewijzigd door mmy841 op 12-08-2005 12:49 ]

Pagina: 1