+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

[Vb-net 2013 D] - Associazione file-applicazione e lettura del contenuto

  1. #1
    Dev-01 non è in linea Scribacchino
    Ciao a tutti,

    ho deciso di aggiornare una vecchia applicazione fornendo la possibilità di aprire i file direttamente tramite click (o doppio click a seconda, ovviamente, delle impostazioni di sistema).

    Ho creato le chiavi di registro per instaurare l'associazione e di fatto l'applicazione viene avviata.

    Il mio problema risiede nel fatto che non ho la minima idea di come leggere il contenuto del file e mostrarlo in una textbox.

    Sapreste aiutarmi?

    Grazie.

    Saluti.


    [EDIT]


    Avevo cercato prima ma non lo avevo trovato: è saltato fuori mentre modificavo i termini della ricerca su google. La ricerca integrata non mi aveva proposto risultati.

    http://forum.masterdrive.it/visual-b...sociato-11064/

    Chiedo cortesemente ai moderatori di cancella il post. Grazie.
    Ultima modifica di Dev-01; 28-03-2015 19:30 

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Ovviamente non basta creare l'associazione,.
    Devi predisporre il tuo programma a leggere la linea di comando, perché quando fai doppio clic sul file Windows invia il percorso completo del file alla tua applicazione, esempio:

    mioprog.exe "c:\cartella\nomefile.txt"

    A quel punto il tuo programma legge il nome del file dalla linea di comando e se non è vuota lo userà per aprirlo con una routine che devi predisporre.

    Cerca nella guida Arguments e Command line.

    ℹ️ Leggi di più su gibra ...

  3. #3
    Dev-01 non è in linea Scribacchino
    Ciao,

    ti ringrazio per la risposta.

    Nel link indicato ho visto che esiste una funzione Command() che restituisce la stringa col nome del file.

    Sono effettivamente riuscito a leggere il file tramite uno StreamReader.

    Ho linkato perché se si decide di lasciare il thread il codice che io utilizzo è lo stesso indicato.

    Mi sono però accorto che le chiavi da me create non funzionano (oltre a generare un'errore d'accesso).

    Questo il codice per creare le chiavi:

    	Dim chiave As Microsoft.Win32.RegistryKey
    		chiave = My.Computer.Registry.ClassesRoot.CreateSubKey(".txt", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree)
    		chiave.SetValue("", "Viewer")
    
    chiave = My.Computer.Registry.ClassesRoot.CreateSubKey("Viewer", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree)
    
    		chiave.SetValue("", "Documento di Viewer")
    		chiave = My.Computer.Registry.ClassesRoot.CreateSubKey("MyApp\DefaultIcon", Microsoft.Win32.RegistryKeyPermissionCheck.Default)
    
    		chiave.SetValue("", "C:\icona.ico")
    		chiave = My.Computer.Registry.ClassesRoot.CreateSubKey("MyApp\Shell\open\command", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree)
    		chiave.SetValue("", CurDir() & "\Viewer.exe %1")
    		chiave.Close()
    
    Avevo anche apportato una modifica al file di configurazione del programma modificando:

     <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    
    con

    <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
    
    ma senza ottenere risultati.

    Per assicurarmi che il codice funzionasse ho dovuto operare la selezione manuale dell'applicazione con la quale aprire il file.

    Per funzionare funziona ma non sono contento.

    Hai qualche altra idea o potresti indicarmi qualche modifica da apportare al codice?

    Grazie.

    Saluti.

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    Nel link indicato ho visto che esiste una funzione Command() che restituisce la stringa col nome del file.
    Che non c'entra nulla in VB.NET. Command() è per VB6.


    In VB.Net :
    Non devi usare l'evento Load del form, ma un modulo in cui scrivi una sub Main in grado di leggere gli argomenti della riga di comando, impostandola come oggetto di avvio del programma.

    Sub Main(ByVal args() As String) 
        ' qui metti il codice che gestisce la matrice di stringhe della riga di comando 
        ' ovvero il codice per l'apertura del file nel tuo programma
    End Sub
    

    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    Mi sono però accorto che le chiavi da me create non funzionano (oltre a generare un'errore d'accesso).
    Il che significa che l'utente che stai usando non ha i permessi per farlo.
    Se stai lavorando su Windows Vista o superiori (come sospetto) la questione è piuttosto complicata, perché entrano in gioco fattori che nulla hanno a che vedere con la programmazione, ma riguardano invece le autorizzazioni che ha l'utente indeterminati nodi del registro.
    L'argomento è piuttosto complicato perché varia anche da versione di Windows (es. Home Premium, Professional, Ultimate, ...)

    La regola vuole che le associazioni ai file debbano essere create durante il setup di installazione del programma, perché gli installer (seri), ovvero i programmi con cui si creano i setup, vengono identificati dal sistema che gli permette di fare cose che l'utente normale non potrebbe.
    Fermo restando che l'utente deve appartenere al gruppo Amministrazione, altrimenti non può nemmeno installare.

    Nonostante l'argomento è OT su questo forum, puoi cercare di fare così:
    - metti tutte le istruzioni in un file con estensione .REG (studiati il registro per capire come devono essere scritte)
    - premi tasto Windows, e nella casella di ricerca cerca CMD senza premere invio!!!.
    - in alto ti mostrerà: cmd.exe
    - ci fai clic-destro sopra e dal menu scegli Avvia come amministratore
    - ora navighi nella cartella in cui hai salvato il tuo file REG
    - lo digiti sulla riga di comando e premi invio, poi conferma le richieste.



    Comunque qui spiega bene il tutto, e c'è anche un esempio usando InnoSetup come installer.

    Tip: Associare un icona a un estensione di file personalizzata - The Total Site
    https://www.thetotalsite.it/programm...tips.aspx?id=1

    ℹ️ Leggi di più su gibra ...

  5. #5
    Dev-01 non è in linea Scribacchino
    Ciao e grazie mille per tutte le dritte.

    Mi scuso per aver dimenticato di specificare Windows 8.1 come SO.

    Il link che mi proponi lo avevo già visitato ed infatti è stato basandomi su questa dichiarazione dell'autore:

    "In VB.Net è sufficiente usare i tipi Registry e OpenSubKey"

    che ho pensato di poter tentare da codice pur non avendo i privilegi di amministrazione (sebbene a parte questa limitazione non mi pare di averne altre).

    A dire il vero non ho mai avuto la necessità di creare installer per le mie applicazioni, mi sono sempre poggiato a un file .xml per definire quanto mi serviva, solo che adesso sto lavorando ad un progetto di più larga distribuzione tramite web per cui volevo effettivamente testare il funzionamento di queste associazioni (che tra l'altro, al momento, vengono utilizzate in un progetto "volatile" (di test) quindi quasi vuoto) ragion per cui non credevo trovare tali problemi (almeno non sulla macchina dove sviluppo).

    Ho provato anche ad eseguire il programma come amministratore tramite impostazione temporanea ed effettivamente non vengono generate eccezioni durante l'esecuzione della routine che crea le chiavi (le trovo anche nel registro), però, di fatto, quando eseguo il click sul file, questi non viene aperto e devo scegliere manualmente l'applicazione da utilizzare la prima volta.

    Tutto questo lo scrivo per chiederti se effettivamente il problema riscontrato nell'ultimo paragrafo possa risultare derivante comunque dalla questione dei privilegi o da qualche altro tipo di impostazione oltre che da un errore nella costruzione delle chiavi.

    Mi restano però almeno due dubbi:
    1) Come mai Visual Studio non propone opzioni per scegliere i privilegi con i quali eseguire l'applicazione se alla fine, fosse anche solo tramite installer, li ottieni lo stesso?
    2) E se si sviluppa una utility da utilizzare in ufficio col bisogno di realizzare alcune cose... si deve per forza fare il "giro lungo"?

    Intanto di ringrazio per la tua gentilezza.

    Saluti.
    Ultima modifica di Dev-01; 29-03-2015 18:31 

  6. #6
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    , di fatto, quando eseguo il click sul file, questi non viene aperto e devo scegliere manualmente l'applicazione da utilizzare la prima volta.
    Evidentemente visono sempre problemi di accesso al registro.

    Tutto questo lo scrivo per chiederti se effettivamente il problema riscontrato nell'ultimo paragrafo possa risultare derivante comunque dalla questione dei privilegi o da qualche altro tipo di impostazione oltre che da un errore nella costruzione delle chiavi.

    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    Mi restano però almeno due dubbi:
    1) Come mai Visual Studio non propone opzioni per scegliere i privilegi con i quali eseguire l'applicazione se alla fine, fosse anche solo tramite installer, li ottieni lo stesso?
    2) E se si sviluppa una utility da utilizzare in ufficio col bisogno di realizzare alcune cose... si deve per forza fare il "giro lungo"?
    1) Perché non dipende dal Visual Studio (così come da ogni altro linguaggio di programmazione), ma da Windows e dai permessi che ha l'utente che esegue l'applicazione.
    Da Windows Vista in poi, nessun programma può eseguire determinate azioni 'programmaticamente' (ovvero da codice), anche se magari l'utente può farle manualmente.
    E' una questione di sicurezza che tende a salvaguardare il computer dell'utente.
    Se tu installi un programma 'malevolo' e Windows gli permette di fare tutto quello che vuole a tua insaputa (tipo inviare informazioni sui tuoi account, email, ecc.) tu saresti contento?

    2) Dipende sempre dai permessi che hanno gli utenti.
    Di queste cose si occupano gli amministratori di sistema.

    Ad esempio: quando lavoravo nella sede di COIN (Mestre) io non potevo installare nulla!!!
    Quando nasceva l'esigenza , il mio 'responsabile' richiedeva e forniva l'autorizzazione ad un amministratore di sistema che si connetteva in remoto sul pc a me assegnato ed eseguiva l'installazione di quanto richiesto.

    ℹ️ Leggi di più su gibra ...

  7. #7
    Dev-01 non è in linea Scribacchino
    E' una questione di sicurezza che tende a salvaguardare il computer dell'utente.
    Se tu installi un programma 'malevolo' e Windows gli permette di fare tutto quello che vuole a tua insaputa (tipo inviare informazioni sui tuoi account, email, ecc.) tu saresti contento?
    No, certo che no, io intendevo almeno sulla macchina di sviluppo come permesso temporaneo e/o limitato ad utilizzi di test durante il debug (magari fornendo le segnalazioni del caso).

    Ho apportato la modifica da te suggerita (e per la quale ti ringrazio molto) al codice sostituendo Command() con:

    	If My.Application.CommandLineArgs().Count = 1 Then
    
    			' Omississ...
    
    	End If
    
    E funziona egregiamente ma non se lo inserisco all'interno del metodo Main durante la cui esecuzione non succede niente.

    Per quanto riguarda i problemi di accesso al registro tenterò l'utilizzo di qualche tool per verificare; al limite rieseguo una reinstallazione di tutto.

    Sei stato gentilissimo, grazie ancora.

    OT: Sei ancora dalle parti di Mestre?

  8. #8
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    No, certo che no, io intendevo almeno sulla macchina di sviluppo come permesso temporaneo e/o limitato ad utilizzi di test durante il debug (magari fornendo le segnalazioni del caso).

    Ho apportato la modifica da te suggerita (e per la quale ti ringrazio molto) al codice sostituendo Command() con:

    	If My.Application.CommandLineArgs().Count = 1 Then
    
    			' Omississ...
    
    	End If
    
    E funziona egregiamente ma non se lo inserisco all'interno del metodo Main durante la cui esecuzione non succede niente.
    Hai impostato nel progetto che l'oggetto da eseguire sia il Sub Main() ?

    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    OT: Sei ancora dalle parti di Mestre?
    No, io sono di Vicenza.
    ℹ️ Leggi di più su gibra ...

  9. #9
    Dev-01 non è in linea Scribacchino
    Ciao,

    Ok... ho disattivato il framework applicazione ed ho impostato il Main come oggetto di partenza.

    Funziona perfettamente.

    Grazie gibra...

    Vicenza... allora distiamo circa 35/40 Km... buono a sapersi.

  10. #10
    Dev-01 non è in linea Scribacchino
    Ciao,

    posso continuare il thread?

    Il mio account è stato modificato fornendomi il ruolo di amministratore.

    Adesso, lascia stare che la pratica è sbagliata, ma mi pare strano che una volta scritte le chiavi ed essendo amministratore, vengano fuori altri problemi... da cui la mia domanda:

    L'iter:

    1) Assumo il ruolo di admin;
    2) Eseguo l'applicazione console che scrive le chiavi;
    3) Doppio click sul file (tutte le volte che voglio), avvio dell'applicazione e lettura regolare dello stesso....(grazie a te);
    4) Spengo il computer;
    5) Lo riaccendo.... e al doppio click non succede niente!!!

    Le chiavi sono presenti ma l'applicazione predefinita non è riconosciuta, ovvero c'è nel menu di scelta come "Continua ad utilizzare...." ma l'icona è una generica e il collegamento non viene "risolto"; nessun altro messaggio d'errore o comunicazione.

    Ho capito che debbo utilizzare l'installer (InnoSetup - e mi sto già prodigando ad impararne l'utilizzo)... ma non è strano questo comportamento?

    Scusami se ho insistito nel riproporre nonostante mi abbia indicato la giusta soluzione. Vorrei solo tentare di capire il perché.

    Grazie.

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 0
    Ultimo Post: 20-10-2015, 16:00
  2. Aprire un file excel 2013 con comando access 2013
    Da MikeEvsp nel forum Microsoft Access
    Risposte: 6
    Ultimo Post: 03-07-2015, 08:41
  3. Lettura e Scrittura su txt del contenuto di una list
    Da PappalardoProduction.com nel forum Visual Basic .Net
    Risposte: 4
    Ultimo Post: 18-12-2008, 13:58
  4. Lettura contenuto file di testo all'interno di una cartella
    Da bertoz nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 14-06-2007, 14:11
  5. Lettura del contenuto di un cd in automatico
    Da emik nel forum Visual Basic 6
    Risposte: 8
    Ultimo Post: 03-08-2006, 22:12