Elikkäs kun mulla on valmiina yksi projekti. Miten saan tehtyä ohjelman, joka muuttaa siitä koodista / valmiista exestä esim
textbox1.text = "tämän"
ja sitten esimerkiksi browserista -
selain.Navigate("http://tämän.com?")
Sen jälkeen vielä generointi uudeksi exeksi tietyllä nimellä? Ilmeisesti jotenkin Booleanin avulla. Pahoittelen kirjoitusasua, se ei ehkä ole paras mahdollinen, mutta toivottavasti joku ymmärtää edes vähän mitä yritän hakea. :)
Sori, ainakaan minä en todennäköisesti ymmärrä tuosta selostuksesta mitään.
Haluat siis tehdä ohjelman, joka muuttaa sinulla olevasta projektista käännettyä exeä? Eikö helpompaa ja järkevämpää olisi vaan muuttaa koodia siitä projektista ja kääntää uudelleen?
Ehkä tarkoitat että haluaisit saada käännettyä samasta projektista useampia, hieman toisistaan poikkeavia sovelluksia. Siinä tapauksessa kannattaa tutustua kääntäjäparameterihin
#If VersioX then VersionX koodi #Else Muiden versioiden koodi #End If
Poweruser kirjoitti:
Miten saan tehtyä ohjelman, joka muuttaa siitä koodista / valmiista exestä [tekstin toiseksi]
Niin, koodista vai valmiista exestä? Tässä on hyvin suuri ero. Koodia voit muuttaa nopeiten ihan tekstieditorilla. Käännetyn ohjelman muuttaminen on hankalaa. Yhtä pitkän tekstin voi vain vaihtaa tiedostoon; entistä lyhyempään tekstiin voi kokeilla lisätä 0-tavuja täytteeksi, mutta tämä toimii vain joissain tilanteissa; entistä pidempää tekstiä ei voi helposti laittaa.
Poweruser kirjoitti:
Ilmeisesti jotenkin Booleanin avulla.
... mitä? :D
Grez kirjoitti:
Sori, ainakaan minä en todennäköisesti ymmärrä tuosta selostuksesta mitään.
Ehmm.
Yritän selostaa vähän tarkemmin. Haluan luoda ohjelman, joka luo ohjelman valmiista koodista muunnetuilla tiedoilla. Eli kun ohjelman avaa, voi tekstibokseihin syöttää tiedot ja sitten painaa "Generoi" Nappia, joka taas avaa "SaveFileDialog"in jolloin voi tallentaa sen exen.
Toivottavasti ymmärrät nyt paremmin. Oon hankkinut Visual Studion viime viikolla ja vasta opettelemassa.
lainaus:
... mitä? :D
Älä kysy. En edes tiedä mitä tuo tarkottaa, lueskelin jostain jenkkisivuilta miten toi vois tapahtua ja siellä puhuttiin jostain booleanista. Englannin taidot ei riittänyt tarpeeksi pitkälle joten tulin tänne. :x
..niin joo, ja siis kun mulla on se valmis projekti, niin haluan sen 'exe generaattorin' käyttävän samaa koodia mutta niin että 'generaattorin' käyttäjä voi itse itse valita mitä tekstiä käytetään textboxissa ja mitä linkkiä sitten taas browserissa ja sitten luoda .exen savefiledialogin avulla. Toivottavasti tämä selvensi edes hitusen..
Suoraviivainen tapa olisi laittaa generaattorin mukaan se lähdekoodi ja kääntäjä. Generaattori tekisi muutokset lähdekoodiin ja kääntäisi sillä uuden ohjelman.
Jos tarkoituksena ei ole varsinaisesti muuttaa ohjelman toimintaa, vaan ainoastaan muuttaa tekstejä, niin voisi ajatella myös että laittaisi ko. tiedot ohjelman resursseiksi. Exeen sisällytettyjä resursseja voi muokata kääntämättä exeä uudestaan.
Kaikkein helpoin vaihtoehto voisi olla laittaa ko. tiedot ohjelman asetuksiin. (ohjelma.exe.config)
Tavallaan toki myös kiinnostaisi kuulla vastaus kysymykseen "miksi".
Mielestäni ongelmaan on kaksi aivan ylivoimaisen helppoa ratkaisua. Tiedot voi tallentaa asetustiedostoon, jolloin sama ohjelma käy kaikille ja mukana pitää vain toimittaa asetustiedosto. Toinen mahdollisuus on generoida asetustiedoston sijaan komentojonotiedosto ja antaa tekstit ohjelmalle komentoriviargumentteina, jolloin ohjelma pitää käynnistää komentojonotiedoston kautta.
VB.NET-kääntäjä tulee Windowsissa tietääkseni aina .NET Frameworkin mukana, joten lähdekoodin muokkaaminen ja kääntäminen uudestaan onnistuu melko helposti. Resurssien muokkaaminen on myös hyvä vaihtoehto mutta vaatinee (?) hieman enemmän koodia.
Jos välttämättä haluat muokata juuri ohjelmaa, sekin on mahdollista toteuttaa kohtalaisen helposti pienellä purkkavirityksellä: voit laittaa alkuperäiseen ohjelmaan niin pitkät tekstit, että generaattorin ei tarvitse koskaan pidentää niitä, ja sitten koodissa voit vielä tunnistaa, mikä osa tekstistä on oikeasti käytössä. Alkuperäisen ohjelman osuus näyttää silloin suunnilleen tältä:
' Tehdään tarpeeksi pitkä teksti, jonka alussa on tunnistettava kohta. Dim teksti As String = "\0-KORVATTAVA-1......." ' Katkaistaan teksti ensimmäisen \0-merkin kohdalta. teksti = teksti.Split("\0".ToCharArray(), 2).GetValue(0) ' Käytetään tekstiä. selain.Navigate(teksti)
Generaattorin pitää vain etsiä tiedostosta tuo tunnistettava alkukohta ("\0-KORVATTAVA-1") ja korvata se ja sopiva määrä seuraavia pisteitä uudella tekstillä ja katkaisumerkillä. Tarvittava koodi on melko yksinkertainen, mutta en jaksa nyt selvittää, miten se tehdään VB.NETillä.
Metabolix kirjoitti:
Tiedot voi tallentaa asetustiedostoon, jolloin sama ohjelma käy kaikille ja mukana pitää vain toimittaa asetustiedosto.
Tuo asetustiedosto kuullostaa hyvältä, kerro ihmeessä lisää? Koitan myös etsiä googlesta joten ilmoittelen jos löydän miten toi asetustiedosto -systeemi tehdään. :)
Lisäät projektiin asetustiedoston (Application configuration file).
Se tulee projektiin nimellä App.config ja on käytännössä xml-tiedosto. Käännetyn ohjelman kanssa se on nimeltään ohjelmasi.exe.config
Tapauksessasi se voisi näyttää tältä:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="Teksti" value="tämän" /> <add key="Osoite" value="http://tämän.com?" /> </appSettings> </configuration>
Sitten vaan koodin puolella
selain.Navigate(System.Configuration.ConfigurationManager.AppSettings("Osoite"))
Muista laittaa lisäksi projektiisi viittaus System.Configurationiin.
Okkei. Kiitosta. Mikä olisi helpoin keino tehdä esimerkiksi ohjelma, joka luo ohjelman nappia painamalla? Luodussa ohjelmassa olisi vaikka Button1 ja sitä painamalla avautuisi MsgBox? Tms? Toivottavasti tajusit. :D
Eikö vielä tullut selväksi, että sinun kannattaa tehdä se ohjelma valmiiksi ja luoda generaattorillasi vain noita asetustiedostoja ohjelmalle? Eli toisin sanoen helpoin keino on laittaa mukaan valmis ohjelma ja generaattorissa nappia painamalla vain kopioida se käyttäjän haluamaan paikkaan.
Kuullostaa silti aika monimutkaselta, ainakin mulle. :s luin että tämä ois helppo tehdä codedomia käyttämällä, tosin vaikuttaa aika hankalalta kun kaikki ohjeet on Englanniksi eikä taivu oma englanninkielen taito niin pitkälle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.