Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.lang.visual-basic > #18460 > unrolled thread

Shell

Started byGreg <greg@alicie.com>
First post2015-08-19 13:36 +0200
Last post2015-08-20 15:27 +0200
Articles 16 — 4 participants

Back to article view | Back to it.comp.lang.visual-basic


Contents

  Shell Greg <greg@alicie.com> - 2015-08-19 13:36 +0200
    Re: Shell Greg <greg@alicie.com> - 2015-08-19 14:29 +0200
      Re: Shell Luca D <antaniserse@yahoo.it> - 2015-08-19 05:39 -0700
        Re: Shell Greg <greg@alicie.com> - 2015-08-19 15:13 +0200
          Re: Shell "Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid> - 2015-08-19 16:19 +0200
            Re: Shell Greg <greg@alicie.com> - 2015-08-19 19:30 +0200
      Re: Shell Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2015-08-19 18:57 +0200
        Re: Shell Greg <greg@alicie.com> - 2015-08-19 19:40 +0200
        Re: Shell Greg <greg@alicie.com> - 2015-08-19 19:52 +0200
          Re: Shell Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2015-08-19 20:48 +0200
            Re: Shell Greg <greg@alicie.com> - 2015-08-19 22:54 +0200
            Re: Shell Greg <greg@alicie.com> - 2015-08-19 23:10 +0200
              Re: Shell Greg <greg@alicie.com> - 2015-08-19 23:16 +0200
                Re: Shell Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2015-08-20 12:25 +0200
                  Re: Shell Greg <greg@alicie.com> - 2015-08-20 15:09 +0200
                    Re: Shell Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2015-08-20 15:27 +0200

#18460 — Shell

FromGreg <greg@alicie.com>
Date2015-08-19 13:36 +0200
SubjectShell
Message-ID<mr1pnr$tok$1@solani.org>
VB6

Dopo aver verificato che il file sia presente, ho questa istruzione:
ret = Shell(App.Path & "\Update.exe", vbNormalFocus)
che ritorna qusto errore:
Errore:5-Chiamata di routine o argomento non valido.
Il problema si verifica su un solo pc, cosa può essere? Grazie

-- 
Greg

[toc] | [next] | [standalone]


#18461

FromGreg <greg@alicie.com>
Date2015-08-19 14:29 +0200
Message-ID<mr1sqh$9bh$1@solani.org>
In reply to#18460
Il 19/08/15 13:36:27 Greg ha scritto:
> VB6

> Dopo aver verificato che il file sia presente, ho questa istruzione:
> ret = Shell(App.Path & "\Update.exe", vbNormalFocus)
> che ritorna qusto errore:
> Errore:5-Chiamata di routine o argomento non valido.
> Il problema si verifica su un solo pc, cosa può essere? Grazie

Ho modificato nel modo seguente ma l'errore permane:
file = App.Path & "\Update.exe"
    If Dir(file) <> "" Then
        q4 = Shell("C:\windows\system32\calc.exe", 1)
        q5 = Shell(file, 1)
    End If

La prima chiamata va a buon fine, la seconda da errore n.5, eppure 
l'argomemento è passato allo stesso modo, il file esiste, non so piu 
cosa guardare.

Ho provato anche a cancellare il codice, chiudere il progetto e poi 
riscriverlo di nuovo.

Qualche idea? Grazie

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18462

FromLuca D <antaniserse@yahoo.it>
Date2015-08-19 05:39 -0700
Message-ID<3ab2c66a-16b1-429f-ba5e-0bd22f5a9522@googlegroups.com>
In reply to#18461
Il giorno mercoledì 19 agosto 2015 14:29:05 UTC+2, Greg ha scritto:

>App.Path & "\Update.exe"

Una possibilità: questa concatenazione ha sempre il potenziale problema che se l'applicazione chiamate è nella radice di una unità, genera un percorso non valido (App.Path ritorna "X:\" in quel caso, con l'ovvio errore)

In alternativa, problemi di autorizzazioni all'esecuzione di quel file specifico?

[toc] | [prev] | [next] | [standalone]


#18463

FromGreg <greg@alicie.com>
Date2015-08-19 15:13 +0200
Message-ID<mr1vda$ioc$1@solani.org>
In reply to#18462
Il 19/08/15 14:39:17 Luca D ha scritto:
> Il giorno mercoledì 19 agosto 2015 14:29:05 UTC+2, Greg ha scritto:

>> App.Path & "\Update.exe"

> Una possibilità: questa concatenazione ha sempre il potenziale problema che 
> se l'applicazione chiamate è nella radice di una unità, genera un percorso 
> non valido (App.Path ritorna "X:\" in quel caso, con l'ovvio errore)

No, no è nella radice.

> In alternativa, problemi di autorizzazioni all'esecuzione di quel file 
> specifico?

Forse è questa! Ho chiesto di provare a fare direttamente doppio clik 
sul file Update.exe e si apre la finestra: Consentire al programma 
seguente con autore sconosciuto di apportare modifiche la computer?
e chiede la pass di amministratore.

E cosi si capisce e uno mette la pass, mentre da codice da l'errore di 
run-time 5, criptico. C'è un modo per superare il blocco da codice?
In ogni caso grazie

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18464

From"Andrea (Work)" <andrea.isworkDELETEME@gmail.invalid>
Date2015-08-19 16:19 +0200
Message-ID<1xkgwtnw7o0k2.qnm1q6cbqs71.dlg@40tude.net>
In reply to#18463
Il Wed, 19 Aug 2015 15:13:13 +0200, Greg ha scritto:

> E cosi si capisce e uno mette la pass, mentre da codice da l'errore di 
> run-time 5, criptico. C'è un modo per superare il blocco da codice?
> In ogni caso grazie

Prendila con le molle, non ho tempo di provarla, ma forse con un file
nominato "UPDATE.exe.manifest"  dove indichi:

| <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
| <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
| <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="UPDATE" type="win32"/>
| <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|  <security>
|                <requestedPrivileges>
|                    <requestedExecutionLevel
|                        level="asInvoker"/>
|                </requestedPrivileges>
|          </security>
|       </trustInfo>
|   </assembly>

[toc] | [prev] | [next] | [standalone]


#18466

FromGreg <greg@alicie.com>
Date2015-08-19 19:30 +0200
Message-ID<mr2egi$b0i$1@solani.org>
In reply to#18464
Il 19/08/15 16.19.06 Andrea (Work) ha scritto:
> Il Wed, 19 Aug 2015 15:13:13 +0200, Greg ha scritto:

>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
>> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" 
>> name="UPDATE" type="win32"/> <trustInfo 
>> xmlns="urn:schemas-microsoft-com:asm.v2">  <security>
>>                <requestedPrivileges>
>>                    <requestedExecutionLevel
>>                        level="asInvoker"/>
>>                </requestedPrivileges>
>>          </security>
>>       </trustInfo>
>>   </assembly>

Grazie Andrea, ma non esco dall'errore, è come se non ci fosse

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18465

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2015-08-19 18:57 +0200
Message-ID<mr2c6c$lsk$1@speranza.aioe.org>
In reply to#18461
Dopo dura riflessione, Greg ha scritto :

Se non ricordo male, e' un casino generato dall'UAC

> q5 = Shell(file, 1)

quell'uno e' vbNormalFocus, cioè impone di attivare la finestra (che 
NON
si attiva perchè compare il prompt di autorizzazione UAC) e quindi
genera un errore come se l'applicazione non fosse partita (invece e' in
attesa del dialogo UAC).

Dopo vari smadonnamenti risolsi cosi:

    file = App.Path & "\Update.exe"
    If Dir(file) <> "" Then

       On error resume next
        q5 = Shell(file, 1)
       On error goto 0


    End If

Poco elegante ma funzionante.

[toc] | [prev] | [next] | [standalone]


#18467

FromGreg <greg@alicie.com>
Date2015-08-19 19:40 +0200
Message-ID<mr2f2u$d5r$1@solani.org>
In reply to#18465
Il 19/08/15 18.57.55 Franz_aRTiglio ha scritto:
> Dopo dura riflessione, Greg ha scritto :

> Se non ricordo male, e' un casino generato dall'UAC

>> q5 = Shell(file, 1)

> quell'uno e' vbNormalFocus, cioè impone di attivare la finestra (che NON
> si attiva perchè compare il prompt di autorizzazione UAC) e quindi
> genera un errore come se l'applicazione non fosse partita (invece e' in
> attesa del dialogo UAC).

> Dopo vari smadonnamenti risolsi cosi:

>     file = App.Path & "\Update.exe"
>     If Dir(file) <> "" Then

>        On error resume next
>         q5 = Shell(file, 1)
>        On error goto 0


>     End If

> Poco elegante ma funzionante.

Grazie Franz, non mi da l'errore, ma Update non viene mai eseguito.
Adesso sono sulla macchina di sviluppo, xp come amministratore, quello 
che non capisco è:
- perchè prima funzionava e adesso no
- perchè lancia Calc.exe e non Update.exe
Mai successa una cosa del genere, non so che pesci prendere :(

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18468

FromGreg <greg@alicie.com>
Date2015-08-19 19:52 +0200
Message-ID<mr2fot$fmo$1@solani.org>
In reply to#18465
Il 19/08/15 18.57.55 Franz_aRTiglio ha scritto:
> Dopo dura riflessione, Greg ha scritto :

> Se non ricordo male, e' un casino generato dall'UAC

>> q5 = Shell(file, 1)

> quell'uno e' vbNormalFocus, cioè impone di attivare la finestra (che NON
> si attiva perchè compare il prompt di autorizzazione UAC) e quindi
> genera un errore come se l'applicazione non fosse partita (invece e' in
> attesa del dialogo UAC).

A me che sia normalfocus non interessa.
L'importante è che Update esegua 2 sole semplici istruzioni:
- copy il programma nuovo sul vecchio
- lo mandi inesecuzione con un altra funzione shell

Purtroppo non va bene con nessun parametro, neanche vbHide, e neanche 
senza parametri del tutto. E' un bel mistero

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18469

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2015-08-19 20:48 +0200
Message-ID<mr2ilb$5k2$1@speranza.aioe.org>
In reply to#18468
Greg ha detto questo mercoledì :

> A me che sia normalfocus non interessa.
> L'importante è che Update esegua 2 sole semplici istruzioni:
> - copy il programma nuovo sul vecchio
> - lo mandi inesecuzione con un altra funzione shell
> Purtroppo non va bene con nessun parametro, neanche vbHide, e neanche senza 
> parametri del tutto. E' un bel mistero

'spe... frena:

stai cercando di lanciare un "update.exe", ho capito bene ? il VECCHIO
programma lancia il programma che lo deve sostituire ?

Se ho capito bene allora non e' un problema di UAC, il problema
e' che il VECCHIO programma è in esecuzione mentre il NUOVO tenta di
sovrascriverlo!

Se invece ho capito male, a 'sto punto proverei a lanciare explorer.exe
specificandogli l'exe da lanciare come parametro

https://support.microsoft.com/en-us/kb/130510

[toc] | [prev] | [next] | [standalone]


#18470

FromGreg <greg@alicie.com>
Date2015-08-19 22:54 +0200
Message-ID<mr2qfb$nr3$1@solani.org>
In reply to#18469
Il 19/08/15 20.48.19 Franz_aRTiglio ha scritto:

> 'spe... frena:

> stai cercando di lanciare un "update.exe", ho capito bene ? il VECCHIO
> programma lancia il programma che lo deve sostituire ?

> Se ho capito bene allora non e' un problema di UAC, il problema
> e' che il VECCHIO programma è in esecuzione mentre il NUOVO tenta di
> sovrascriverlo!

Mi hai fatto accendere la lampadina!!!
C'era un timer che aspettava che VECCHIO chiudesse prima di 
sovrascrivere. Chissà perchè, non ricordavo piu a cosa serviva l'ho 
tolta, per rendere il codice piu chiaro :( Me tapino

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18471

FromGreg <greg@alicie.com>
Date2015-08-19 23:10 +0200
Message-ID<mr2rc1$r5j$1@solani.org>
In reply to#18469
Il 19/08/15 20.48.19 Franz_aRTiglio ha scritto:

> 'spe... frena:

> stai cercando di lanciare un "update.exe", ho capito bene ? il VECCHIO
> programma lancia il programma che lo deve sostituire ?


Ho ritornato le cose come stavano prima, Update funziona bene in 
modalità progettaizone ma il compilato, appena lanciato mi da un altro 
errore strano:
Impossibile avviare l'applicazione. La configurazione dell'applicazione 
non è corretta. Una nuova installazione potrebbe risolvere il problema.

Ho cercato con google ma non ci sono occorrenze di qusto errore nel 
mondo vb6. Hai per caso qualche idea delle tue? Io ormai ho la mente 
offuscata da una giornata di stress :(

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18472

FromGreg <greg@alicie.com>
Date2015-08-19 23:16 +0200
Message-ID<mr2rnl$sf2$1@solani.org>
In reply to#18471
Il 19/08/15 23.10.09 Greg ha scritto:

> Ho cercato con google ma non ci sono occorrenze di qusto errore nel mondo 
> vb6. Hai per caso qualche idea delle tue? Io ormai ho la mente offuscata da 
> una giornata di stress :(

Trovato: il file manifest da fastidio :(
Basta, chiudo e vado a dormire.
Grazie della dritta Franz :)

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18473

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2015-08-20 12:25 +0200
Message-ID<mr49it$ook$1@speranza.aioe.org>
In reply to#18472
Greg ha spiegato il 19/08/2015 :


>> Ho cercato con google ma non ci sono occorrenze di qusto errore nel mondo 
>> vb6. Hai per caso qualche idea delle tue? Io ormai ho la mente offuscata da 
>> una giornata di stress :(
> Trovato: il file manifest da fastidio :(
> Basta, chiudo e vado a dormire.
> Grazie della dritta Franz :)

:)

Comunque, la prossima volta ti conviene fare come segue:
Il programma che deve aggiornarsi usando l'api "GetCurrentProcessId"
ottiene il proprio ProcessId (che e' univoco), lancia l'updater
passandogli il ProcessId come parametro e si chiude; l'updater 
controlla
la lista dei programmi in esecuzione fino a che il ProcessID non
scompare (il programma si è chiuso), e solo allora interviene.

In questo modo non hai problemi di timer o di ritardi in chiusura
causati da programmi esterni (tipo antivirus)...

[toc] | [prev] | [next] | [standalone]


#18474

FromGreg <greg@alicie.com>
Date2015-08-20 15:09 +0200
Message-ID<mr4jii$6cc$1@solani.org>
In reply to#18473
Il 20/08/15 12:25:41 Franz_aRTiglio ha scritto:

> Comunque, la prossima volta ti conviene fare come segue:
> Il programma che deve aggiornarsi usando l'api "GetCurrentProcessId"
> ottiene il proprio ProcessId (che e' univoco), lancia l'updater
> passandogli il ProcessId come parametro e si chiude; l'updater controlla
> la lista dei programmi in esecuzione fino a che il ProcessID non
> scompare (il programma si è chiuso), e solo allora interviene.

> In questo modo non hai problemi di timer o di ritardi in chiusura
> causati da programmi esterni (tipo antivirus)...

E invece il problema c'è lo stesso, perchè .... ho fatto queste prove:
Prima di andare udare un bel po di api per sapere se il ProcessID è 
ancora in funzione ho fatto delle prove piu semplici e immediate:
- ho inibito ogni operazione dell'Updater, solo lo show della form, col 
chiamante  NON in esecuzione, visto che lo lancio manualmente, 
incredibile mi da errore 5;
- ho rifatto ex novo l'updater, ricompilato e cambiato nome in 
prova2.exe, lo lancio manualmente e va bene nel senso che lancia il 
programma aggiornato e si chiude; lo rinomino in Update.exe oppure in 
provaUpdate.exe e compare la richiesta pass amministratore! Questa cosa 
mi sfugge, sembra che la parolina Update nel nomeprogramma non sia più 
gradita per qualche strano motivo!

-- 
Greg

[toc] | [prev] | [next] | [standalone]


#18475

FromFranz_aRTiglio <franzgol@N0SPAMtin.it>
Date2015-08-20 15:27 +0200
Message-ID<mr4k7l$j9j$1@speranza.aioe.org>
In reply to#18474
Greg ci ha detto :

> richiesta pass amministratore! Questa cosa mi sfugge, sembra che la parolina 
> Update nel nomeprogramma non sia più gradita per qualche strano motivo!

Idem con "install" e "setup" altri similari, la cosa e' VOLUTA da
windows vista in poi per aggirare (pateticamente) la problematica di
intercettare programmi che pur non usando registry e/o percorsi
riservati/di sistema e/o windows installer.

anche se compili il piu stupido degli "hello world" ma lo nomini
come setup install update ecc. quando parte invoca l' UAC.

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.lang.visual-basic


csiph-web