Il linguaggio Visual Basic di Microsoft
 

Shell

Greg 19 Ago 2015 13:36
VB6

Dopo aver verificato che il ******* 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
Greg 19 Ago 2015 14:29
Il 19/08/15 13:36:27 Greg ha scritto:
> VB6

> Dopo aver verificato che il ******* 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: ******* = App.Path &
"\Update.exe"
If Dir ******* <> "" Then
q4 = Shell("C:\windows\system32\calc.exe", 1)
q5 = Shell ******* 1)
End If

La prima chiamata va a buon fine, la seconda da errore n.5, eppure
l'argomemento è passato allo stesso modo, il ******* 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
Luca D 19 Ago 2015 14:39
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 *******
specifico?
Greg 19 Ago 2015 15:13
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 *******
> specifico?

Forse è questa! Ho chiesto di provare a fare direttamente doppio clik
sul ******* 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
Andrea (Work) 19 Ago 2015 16:19
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 *******
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>
Franz_aRTiglio 19 Ago 2015 18:57
Dopo dura riflessione, Greg ha scritto :

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

> q5 = Shell ******* 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 s*****menti risolsi cosi:

******* = App.Path & "\Update.exe"
If Dir ******* <> "" Then

On error resume next
q5 = Shell ******* 1)
On error goto 0


End If

Poco elegante ma funzionante.
Greg 19 Ago 2015 19:30
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
Greg 19 Ago 2015 19:40
Il 19/08/15 18.57.55 Franz_aRTiglio ha scritto:
> Dopo dura riflessione, Greg ha scritto :

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

>> q5 = Shell ******* 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 s*****menti risolsi cosi:

> ******* = App.Path & "\Update.exe"
> If Dir ******* <> "" Then

> On error resume next
> q5 = Shell ******* 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
Greg 19 Ago 2015 19:52
Il 19/08/15 18.57.55 Franz_aRTiglio ha scritto:
> Dopo dura riflessione, Greg ha scritto :

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

>> q5 = Shell ******* 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
Franz_aRTiglio 19 Ago 2015 20:48
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
Greg 19 Ago 2015 22:54
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
Greg 19 Ago 2015 23:10
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
Greg 19 Ago 2015 23:16
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 ******* manifest da fasti***** :(
Basta, chiudo e vado a dormire.
Grazie della dritta Franz :)

--
Greg
Franz_aRTiglio 20 Ago 2015 12:25
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 ******* manifest da fasti***** :(
> 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)...
Greg 20 Ago 2015 15:09
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
Franz_aRTiglio 20 Ago 2015 15:27
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.

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio Visual Basic di Microsoft | Tutti i gruppi | it.comp.lang.visual-basic | Notizie e discussioni visual basic | Visual basic Mobile | Servizio di consultazione news.