Oppure

Loading
02/02/09 20:31
theprogrammer
Postato originariamente da ottobits:

... Vai in una cartella ...


L'ho fatto ... mai capitato quanto dici ...

Ho provato con tanti tipi di file ...

...
aaa
02/02/09 20:37
ottobits
Che sistema operativo adoperi? dalle poche prove che ho eseguito con Vista, sembra che questo problema non si presenti (a parte l'uac che ogni volta prompta nonostante l'inserimento del manifest all'interno delle risorse). Con XP invece il problema si presenta, almeno sui miei sistemi.

Cmq, la soluzione del context menu è nata dal fatto che il programma che sto ultimando (?) era nato per essere utilizzato tramite command line oppure una semplice dll. Ora che invece l'ho dotato di una gui vera e propria, devo appoggiarmi al context menu. Questo per evitare di fare un ulteriore (e grossa) sezione di codice per implementare un file browser che non era assolutamente in cantiere. E il file browser fatto con il Treeview è abbastanza orrendo e zeppo di complicazioni che esulano dal contesto del mio programma, che è semplicemente un programma di crittazione che riceve come argomento un semplice nome di un file, sparato via context.
Ultima modifica effettuata da ottobits 02/02/09 20:43
aaa
02/02/09 20:43
theprogrammer
XP SP3 ...
aaa
02/02/09 20:48
ottobits
XP SP3 come il mio, eppure si presenta il prob. Cmq faro altre prove per vedere se riesco a capire dove risiede l'intoppo. Se dovesse riguardare l'estensione della shell, allora non saprei proprio come implementarla ulteriormente e dovrei realizzare un file browser, cosa che mi fa venire l'orticaria :)
Al limite lo pubblico cosi com'è, con la shell extension. Poi vedremo come si comporta sui sistemi di chi lo vorrà provare.
Ultima modifica effettuata da ottobits 02/02/09 20:51
aaa
03/02/09 13:12
ottobits
Aggiornamento sul problema dell'aviso di protezione. Il problema di cui ho parlato in precedenza è descritto in questo articolo:
support.microsoft.com/kb/…

Quindi ho provato ad eseguire questo codice per vedere se il problema veniva risolto:

Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long

Private Sub Form_Load()
Dim cLine As String, b As Byte
SetEnvironmentVariable "SEE_MASK_NOZONECHECKS", "1" ' disattiva l'avviso di protezione
cLine = Command$
' tolgo gli apici " che arrivano dalla context
cLine = (Mid$(cLine, 2, Len(cLine) - 2))
' cline è il nome completo del file con la path
Open cLine For Binary As 1
Get #1, , b
Close 1
SetEnvironmentVariable "SEE_MASK_NOZONECHECKS", "0" ' riattiva l'avviso di protezione
Unload Me
End Sub

Nonostante abbia impostato la variabile come descritto nell'articolo di microsoft, il problema continua a presentarsi. Anche non riattivando l'avviso di protezione, lasciando cioe la variabile d'ambiente su 1, l'avviso di protezione compare lo stesso... 'tacci sua!
Suggerimenti?

aaa
03/02/09 14:40
theprogrammer
Scusa, ma che c'entra quell'articolo con il tuo problema?

AES fa apparire una finestra con un warning ma non c'entra nulla con il problema dell'esecuzione non voluta del file passato come parametro ...

Insomma ... non vedo nessuna relazione con il tuo problema ...
aaa
03/02/09 15:34
ottobits
E' un workaround per capire dove risiede il problema. Cmq, anche settando in modo permanente la variabile d'ambiente, l'avviso di protezione esce fuori lo stesso. Giusto per completezza, se si vuole disattivare completamente l'avviso, bisogna modificare l'opzione /noexecute=optin.
Insomma il problema non è risolto, per qualche strana ragione la variabile %1 viene passata dal sistema operativo a ShellExecute e quindi al DEP che si interpone con il messaggio di avviso protezione. Tuttociò non ha senso.
aaa
03/02/09 20:20
ottobits
Dal momento che nessuno si offre volontario alla risoluzione di questo problema, o quantomeno a un semplice suggerimento, chiudo questo post dando qualche piccola informazione riguardo al context menu. Non basta mettere la chiave "pippo.exe" "%1" nella shell, poichè si possono avere risultati inattesi (come il tentativo di run dell'argomento contenuto nella variabile %1, perchè comunque controllato dal DEP). E' necessario implementare l'estensione del context in modo completo, con tanto di classi univoche all'interno del registro. E' poi necessario creare un controllo activeX (o una DLL) che gestisce le informazioni che vengono fornite dalla context. In ultimo, il componente activeX si occuperà di lanciare il programma con allegate le informazioni opportunamente trattate. Il tutto farcito da una consistente sezione di codice fatta in API. Non a caso i gestori delle shell extension vengono venduti a 150 dollari, più o meno.
Buon coding a tutti :k:
aaa