Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6 Shell ongelma

pice [27.07.2006 11:07:42]

#

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?

setä [27.07.2006 11:13:54]

#

Shell on funktio ja oikea muoto on:
z = Shell(...)

pice [27.07.2006 13:19:23]

#

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?

hunajavohveli [27.07.2006 16:22:45]

#

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.

pice [27.07.2006 17:53:01]

#

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.

Merri [27.07.2006 21:15:08]

#

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 :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta