Tarkoitus on käynnistää Opti_1.exe niminen ohjelma Shell komennolla. Jostakin syystä Shell komento ei käynnistä tätä ohjelmaa. VB kyllä tutkii kyseisen kansion, jos ohjelmaa ei löydy, tulee virheilmoitus. Mutta sitten ei kuitenkaan aja sitä. Olen kokeillut mm. seuraavia variaatioita:
Shell ("C:\Data\Mittaukset\Mitt_01\Opti_1.exe")
Shell "C:\Data\Mittaukset\Mitt_01\Opti_1.exe"
Shell "C:\Data\Mittaukset\Mitt_01\Opti_1.exe", 0
Shell "C:\Data\Mittaukset\Mitt_01\Opti_1.exe", 1
Minulla on VB6 learning edition, onkohan tämä ko. version ominaisuus, siitähän on tarkoituksella jätetty jotain ominaisuuksia pois?
Shell on funktio ja oikea muoto on:
z = Shell(...)
Kokeilin tällä tavoin, eri variaatioita:
Dim opti As Variant
opti = Shell ("C:\Data\Mittaukset\Mitt_01\Opti_1.exe")
opti = Shell ("C:\Data\Mittaukset\Mitt_01\Opti_1.exe",0)
opti = Shell ("C:\Data\Mittaukset\Mitt_01\Opti_1.exe",1)
opti = Shell ("C:\Data\Mittaukset\Mitt_01\Opti_1.exe",2)
...
mutta edelleen sama lopputulos. Dos-ikkuna kylläkin välähtää hetken ruudussa, mutta ohjelma ei käynnisty.
Kun tämä funktio on muotoa "opti = Shell(...)", niin pitääkö tälle opti muuttujalle tehdä vielä jotain?
Oletko varma, ettei ohjelma käynnisty? Tuollainen "välähtäminen" kuulostaa siltä, että ohjelma loppuu lähes heti, kun on käynnistynyt ja ikkuna sulkeutuu automaattisesti.
Ongelmaan löytyi ratkaisu. Opti_1.exe käynnistyi, mutta ei löytänyt tiedostoja joita yritti lukea. Kun saman exe:n käynnisti hiirellä klikkaamalla, se luki ja kirjoitti tiedostoja samaan hakemistoon missä itsekin oli.
Jos sen käynnisti VB6:n Shell-funktiolla, oletushakemistoksi tuli joku muu, en tiedä mikä. Joka tapauksessa kirjoitin koko hakemistopolun ko. ohjelmaan, niin nyt toimii.
Voit korjata ongelman myös muuttamalla shelliä kutsuvan ohjelman senhetkisen hakemiston avatun ohjelman hakemistoksi, jolloin mainitsemaasi ongelmaa ei tietääkseni tule.
Toinen vaihtoehto olisi käyttää ShellExecute APIa, jolle voi antaa myös oletushakemiston.
Yleistä hyvää ohjelmointia olisi käyttää muuta kuin kovakoodattuja hakemistopolkuja, esimerkiksi minulla C-asemaksi on vuosien saatossa päätynyt DVD-asema; sinne ei pahemmin kirjoitella :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.