Newsgroup: it.comp.lang.visual-basic
Titolo: [Urgente]Diritti di Accesso a cartella ALL User in WinXP

Ciao a tutti,
la cartella "C:\Documents and Settings\All Users\Dati applicazioni" in WinXP
dovrebbe essere quella cartella dove le applicazioni scrivono e leggono file
con qualsiasi utente si sia loggato in Windows.
In realtà oggi ho verificato che questo è vero solo se i file da scrivere
sono stati creati dallo stesso utente che li vuole modificare.
Per fare un esempio:
1. Accedo come Amministratore nella cartella "C:\Documents and Settings\All
Users\Dati applicazioni"
2. Creo un file "prova.txt" con scritto dentro "ciao" e lo salvo
3. Riapro il file e lo modifico scrivendo "ciao a tutti" -- fino a qua tutto
ok
4. Accedo con "User" e vado nella cartella "C:\Documents and Settings\All
Users\Dati applicazioni"
5. Apro il file "prova.txt", lo modifico, ma non ho i diritti per salvarlo
:-((
Se faccio la stessa operazione ma sempre rimanendo dentro "User" tutto
funziona correttamente!
IL PROBLEMA:
La mia applicazione deve essere installata dall'Amministratore e va a
scrivere alcuni file all'interno di ""C:\Documents and Settings\All
Users\Dati applicazioni""
L'utente finale accede come "User" ma l'applicazione non funziona perchè
"AllUser" non è accessibile!
Come devo fare?
Ringrazio tutti in anticipo?
Emiliano

Ho visto che nessuno mi ha risposto... :-((
Faccio la stessa domanda in altri termini:
Voi come fate a salvare un file *.ini in una cartella poco accessibile
dall'utente (in quanto contiene la protezione della demo del programma) in
modo che questo file possa essere letto e scritto da qualsiasi utente di
Windows anche quelli con limitazioni?
oppure
Che metodo utilizzate per bloccare le vostre applicazioni dopo un cero
numero di utilizzi?... il blocco ovviamente deve valere per qualsiasi utente
di Windows... vecchi e nuovi...
Ringrazio tutti in anticipo.
Ciao
Emiliano

 utente di Windows... vecchi e nuovi...
Nessun blocco dell'applicativo, anzi, libera copia e distribuzione. Il
limite lo metto sul numero delle operazioni che si possono effettuare. Mi
baso su un mio file, piuttosto crittato, che riporta le autorizzazioni
dell'utente e, ovviamente, su certe caratteristiche dell'installazione...

 subordine, che Windows limita l'uso di qualsiasi applicativo.
Sei sicuro? io ho provato con due PC diversi creando cartelle e file
contatore (quando non già esistenti) con le seguenti funzioni:
MkDir ("nomecartella")
Open nomefile For Output As #1
        Print #1, Str(n +1)
Close #1
Quindi ricapitolando:
1. l'amministratore apre il programma, che automaticamente aggiorna il file
contatore dentro la cartella "C:\Documents and Settings\AllUser\Dati
applicazioni\NomeNuovaCartella"; se questa non esiste viene creata
dall'applicazione stessa.
2. Disconnetto l'amministratore e accedo come utente User con limitazioni, e
mi trovo che la stessa cartella creata e dall'amministratore non è
accessibile
N.B. Se già dal passaggio "1" fossi entrato in Windows con l'utente User non
avrei avuto problemi in quanto la cartella e il file contatore sarebbe stato
creato da quest'ultimo.
Cioè: ogni utente all'interno della cartella "C:\Documents and
Settings\AllUser\Dati applicazioni\" può solo modificare i file da esso
generati e non file generati da altri utenti...
Lo si può notare anche creando i file le cartelle con Windows e non per
forza con un applicativo VB.
Ora mi affido a te che sei più esperto...
Ciao
Emiliano

 Close #1
Ripeto: se ci fossero limitazioni nella scrittura di file (non bypassabili)
direi che Windows non funziona!


Bene... e allora cosa mi consigli...
Come posso far modificare a un'applicazione VB un file all'interno delle
cartelle "Programmi" o "Windows" o "C:\Documents and Settings\AllUser"
quando l'utente ha diritti limitati.
Come bypassare queste limiti...?
Ciao e grazie
Emiliano

 Come bypassare queste limiti...?
Usando una cartella che non sia di sistema (o pseudo tale, come l'innocua
C:\Emiliano), non so più come dirlo.
Ora provo a entrare come normale utente e se il mio applicativo non va
scrivo alla mamma, rinnegandola.


Sarebbe come dire che il file per sproteggere il programma si trova proprio
li! Inoltre non voglio "sporcare" la cartella "C:" dei miei clienti, sarebbe
brutto...
Ciao e grazie
Spero di riuscire a venirne fuori.... ma possibile che nessuno abbia di
questi problemi? Mi sembra ovvio voler proteggere un programma senza
limitarsi all'amministratore.
Emiliano

 scrivo alla mamma, rinnegandola.
Ho scritto il programma che segue (un form e un bottone), l'ho compilato
(EXE) e l'ho provato con diritti di amministratore (Ho XP Pro, senza alcun
SP). Funziona.
Ho creato un utente con account "limitato", ho disconnesso l'amministratore
e sono entrato come tale utente limitato, ho eseguito il programma (anche
preventivamente cancellando la cartella C:\Lupo). Funziona.
Private Sub Command1_Click()
    cartella = "C:\Lupo"
    file = cartella & "\Lupo.txt"
    file_provvisorio = file & "_provvisorio"
    If Dir("C:\Lupo", vbDirectory) = "" Then
'           La cartella non esiste - La creo
        MkDir cartella
    End If
    If Dir(file) = "" Then
'           Il file pippo.txt non esiste - Lo creo
        canale_output = FreeFile
        Open file For Output As #canale_output
        Close #canale_output
    End If
    If Dir(file_provvisorio) <> "" Then
'           Elimino il file provvisorio
'           Chissa' mai perche' esiste, ... interruzione precedente?
        Kill file_provvisorio
    End If
'       Creo il file provvisorio
    canale_output = FreeFile
    Open file_provvisorio For Output As #canale_output
'       Leggo pippo.txt e lo scrivo/duplico sul file provvisorio
'       Apro il file pippo.txt - Esiste sicuramente
    canale_input = FreeFile
    Open file For Input Shared As #canale_input
    Do
        If EOF(canale_input) Then Exit Do
        Line Input #canale_input, riga
        Print #canale_output, riga
    Loop
'       Ora accodo una riga sul file provvisorio
    Print #canale_output, Now
'       Chiudo pippo.txt
    Close #canale_input
'       Chiudo il file provvisoro
    Close #canale_output
'       Cancello pippo.txt
    Kill file
'       Rinomino il file provvisorio in pippo.txt
    Name file_provvisorio As file
'       Fine procedura
    Unload Me
End Sub

 Non posso disabilitare solo alcune funzioni, non funzionerebbe niente.
Il mio demo è al pieno delle funzionalità (tutte e, proprio perchè tutte,
più di quante un singolo utente mi abbia mai chiesto nelle reali e pagate
abilitazioni), ma, come detto, con dei limiti nel numero delle operazioni
(records) inseribili. Il tutto viene gestito dall'applicativo. Come faccio?
Beh, abbi pazienza, ma (per poco sicuro che sia) non lo posso/voglio dire.

> proprio li!
PS: Io racconto ai quattro venti la cartella e il nome del file di
protezione col messaggio, circa, "... chi lo tocca muore ..."
Prova a toccare anche un solo bit (bit, nemmeno un byte) di quel file e vedi
che succede...
No, non muori, ma non ti va più una cippa e ti ritrovi istantaneamente in
demo.
Ora, sì (discorso antico e già fatto), se uno mi chiama e mi dice "ho
cambiato la macchina, o il disco...", certo io devo riabilitare (al
telefono). Qualcuno può fregarmi, ovvio, del resto nessuna protezione
(software o hardware) è sicura al 100%. Però, dopo 3/4 volte ravvicinate,
faccio ceme le assicurazioni "Gentile Cliente, riteniamo di fare a meno di
Lei..., dormiamo meglio."