Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296

    [VB 6.0] sovrascrittura file vista non funziona

    Salve,

    ho scritto un software B che dovrebbe effettuare l'aggiornamento di alcuni file del software A.

    Il problema è che su VISTA l'aggiornamento dei file non avviene, e NON vengono mostrati messaggi di errore.

    Se ripeto l'operazione manualmente, dopo aver sovrascritto il file, se lo apro (è un MDB) noto che la sovrascrittura non è avvenuta.

    Ho provato a rinominare il file, e effettuare la copia a mano del nuovo file, ma quando lo apro continua a mostrarmi il VECCHIO.

    Segue il codice che utilizzo.

    codice:
    Private Sub aggiornafile(da As String, a As String)
    
            DoEvents
            On Error GoTo allert
            FileCopy App.Path & "\" & da, Text1.Text & "\" & a
            filecopiati = filecopiati + 1
            Label3.Caption = "file aggiornati " & filecopiati & " di " & filedacopiare
            
            DoEvents
            Exit Sub
    allert:
        Tmp = MsgBox("Impossibile aggiornare, chiudere il programma e riprovare.", vbOKOnly, "software")
        End
    End Sub

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Non è un problema di Visual Basic.
    Con Windows Vista non è più consentito tenere i file di dati (per esempio i database MDB) nella cartella dei programmi (App.Path). Vista "si difende" da tentativi di questo genere dirottando le scritture su una cartella di nome VirtualStore.
    E' meglio utilizzare, per i dati, una sottocartella di Users\<nome utente>\AppData\Local.

  3. #3
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    quindi non si puo' aggirare in nessun modo questo tipo di blocco? neppure manualmente con un intervento dell'utente?

    ho provato ad esmpio a cambiare estensione, ma non funziona.

    Si sa qualcosa in piu' su questo tipo di blocco? come funziona? come aggirarlo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Si può aggirare con privilegi da amministratore, ma non si dovrebbe, salvo essere disposti ad andare incontro ad una serie infinita di grattacapi. :master:
    E' molto meglio adeguarsi allo standard imposto da Vista che, del resto, era già presente in XP.
    In rete esistono infinite discussioni ed articoli sull'argomento.

  5. #5
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    ti ringrazio. A questo punto adattero' il software, anche se non so ancora come...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Il modo migliore è quello di utilizzare le funzioni API SHGetSpecialFolderPath() e SHGetSpecialFolderLocation().
    QUI (ma anche altrove) trovi un po' di apiegazioni.

  7. #7
    Utente di HTML.it L'avatar di barney09
    Registrato dal
    Dec 2000
    Messaggi
    1,296
    ti ringrazio, il problema è che il software gira su praticamente tutti i sistemi operati MS da 98 a Vista.

    Mi inventerò qualcosa per risolvere il problema su vista.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da barney09
    il problema è che il software gira su praticamente tutti i sistemi operati MS da 98 a Vista.
    Mi inventerò qualcosa per risolvere il problema su vista.
    A maggior ragione la soluzione più adatta è quella di ricorrere a quelle API.

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da barney09
    ti ringrazio, il problema è che il software gira su praticamente tutti i sistemi operati MS da 98 a Vista.

    Mi inventerò qualcosa per risolvere il problema su vista.
    Una soluzione rapida su Vista, ma non molto ortodossa è quella (ammesso che il tuo SETUP preveda questa funzionalità) di rimuovere il programma, e re-installarlo su una cartella diversa da %ProgramFiles%, ad esempio:

    C:\MiaApplicazione

    In questo modo non dovreti avere problemi di sorta, dato che lì puoi leggere e scrivere quanto ti pare.

    Comunque in futuro dovrai adeguarti alla nuova policy perchè da Vista in avanti valgono sempre e solo quelle (almeno fino a che Microsoft non le cambia )

    Questo può esserti utile, tanto per iniziare ad orientarti per avere un idea:
    Modifications Required for VB6 Applications to Work on Vista
    http://www.vbforums.com/showthread.p...02#post2807202

    su cui però non concordo con l'uso del Registry di Windows, da cui mi tengo alla larga!

    Riguardo al consiglio di Grumpy:
    E' meglio utilizzare, per i dati, una sottocartella di Users\<nome utente>\AppData\Local.
    farei un distinguo, per il semplice fatto che la cartella \Dati applicazioni sia per l'utente corrente che per tutti gli utenti (AllUsers) è nascosta per impostazione predefinita di Windows, il che significa che l'utente non la vede da Explorer.

    Ora, se l'utente non dovrà mai accedervi allora puoi usarla tranquillamente.

    Ma se devi fare assistenza da remoto (telefonicamente) e l'utente deve accedere a quella cartella per vari motivi, sappi non gli sarà possibile; a meno che non guidi l'utente passo-passo cosa deve fare per rendere visibili cartelle e file nascosti.
    Ma c'è un'altro problema, in questo: a parte la scocciatura di farlo (quasi mai trovi impiegati/e che sanno usare Windows!), se lo fai su Vista è un casino perchè 'affiorano' sul desktop dei file che per l'utente 'utonto' sono oltre che incomprensibili anche pericolosi da aprire, e si sa che la cosa che piace di più fare agli 'utonti' è RISCHIARE! Altrimenti, non si spiegherebbe tutto il proliferarsi di virus via e-mail!!!
    Quindi, una volta fatto tutto, devi rispiegare di nuovo all'utonto come rimettere tutto a posto com'era prima.
    Chi ha vissuto cose di questo genere purtroppo sa cosa significa e quanto tempo si perde!

    Altro problema:
    se in quella cartella metti dei file importanti, es. un file di configurazione (TXT, INI, XML, ...), database, licenza, ecc. poi l'utente come farà a fare il backup dei dati se non vede la cartella?

    Io taglio la testa al toro, e personalmente faccio sempre così:
    Creo una cartella in Documenti relativa al mio programma:
    usando SHGetSpecialFolderLocation e passando il parametro CSIDL_PERSONAL
    ricavo la cartella Documenti dell'utente corrente , e lì creo la mia cartella
    \MiaApp (ovviamente questo avviene nel SETUP, così potrò poi rimuoverla)
    in cui installo tutti i file che so di dover scrivere o aggiornare.
    Ad esempio: i file di configurazione dell'utente, la chiave di licenza, ecc.
    Se la tua applicazione gira solo in locale, allora potresti installarvi anche il tuo database MDB (almeno, mi pare che usi quello).

    In questo modo l'utente può fare il backup della propria cartella Documenti e automaticamente farà il backup anche dei dati della mia applicazione (db, configurazione, ecc.)

    Alternativamente, (come faccio io) puoi implementare tu una procedura di backup che salva i file necessari che, in caso di 'morte' del disco rigido l'utente potrà recuperare immediatamente senza perdere il lavoro.
    Naturalmente... SE FA IL BACKUP!!!!!!!!!!!!!!!



  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da gibra
    Riguardo al consiglio di Grumpy:

    farei un distinguo, per il semplice fatto che la cartella \Dati applicazioni sia per l'utente corrente che per tutti gli utenti (AllUsers) è nascosta per impostazione predefinita di Windows, il che significa che l'utente non la vede da Explorer.
    Il che può essere un fatto positivo.

    Così, a titolo di informazione, illustro la strada che ho adottato io:
    Uso InnoSetup per preparare il pacchetto di installazione e sfrutto la costante {localappdata} per posizionare, in una sua sottocartella dedicata all'applicazione, db locale, file di dati, file ini e quant'altro sia soggetto a modifica. Alla fine del setup memorizzo nel registry questo percorso che recupero poi dall'applicazione con una semplice GetSettings.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.