Newsgroup: it.comp.lang.visual-basic
Titolo: FileCopy con diritti di amministratore?

Ciao a tutti,
anni fa ho realizzato un'applicazione che utilizzo e tutt'ora la quale 
all'interno possiede la funzione FileCopy per copiare dei file all'interno 
di "c:\Programmi\qualcosa\..."
Ora su WinVISTA non funziona piů in quanto pur non dando nessun errore non 
copia il file in quanto probabilmente non ho i diritti di amministratore.
Come posso ovviare al problema?
Grazie in anticipo. 

 Grazie in anticipo.
dando al tuo progr diritti amministrativi? con 2000 non era semplice, ma con 
direi xp direi si potesse. cerca su msdn "xp vb permission", ma non so se 
propongano vb6 su vista. e in ogni modo consigliano di tenere i dati lontano 
dalle cartelle di sistema.
hth, ciao, a.

> di "c:\Programmi\qualcosa\..."
uno piu' esperto di me con vista (io lo sto scoprendo in questi giorni) mi 
ha ricordato le cartelle virtuali.
tutti i programmi nell'installazione propongono "program files". se ci 
scrivi "programmi", da' accesso vietato.
prova "c:\program files\qualcosa", anche se usando vista da admin non so se 
un utente semplice ha accesso.
ciao, a.

 un utente semplice ha accesso.
In programmi/program files non puoi scrivere di default.
O dai accesso everyone full control sulla cartella di installazione del tuo
programma, oppure devi scrivere nelle cartelle utente apposite.

 programma, oppure devi scrivere nelle cartelle utente apposite.
come admin (uac disabilitato proprio), ho provato ora e mi lascia scrivere 
sia in programmi con explorer (che quando entri nella dir, in caption dice 
'program files') sia in program files con salamander (che vede gli oggetti 
reali e al link 'programmi' non mi lascia accedere)
a parte il prevedibile casino che ci verra' fuori coi link :), a occhio 
l'unica resta quella di dare permessi di admin al programma.
non so con uac abilitato.
ciao, a. 

 non so con uac abilitato.
Bhe ti basta usare %programfiles%, uso una funzione abbozzata del genere:
Public Function VariabiliAmbienteParse(ByVal myStr As String) As String
Const SHGFP_TYPE_CURRENT = &H0 'current value for user, verify it exists
Const CSIDL_PROGRAM_FILES = &H26
Dim strToReplace As String
    If InStr(UCase(myStr), "%PROGRAMFILES%") > 0 Then
      strToReplace = GetFolderPath(CSIDL_PROGRAM_FILES, SHGFP_TYPE_CURRENT)
      myStr = Replace$(myStr, "%programfiles%", strToReplace)
      Debug.Print myStr
    End If
    VariabiliAmbienteParse = myStr
 
End Function
Private Function GetFolderPath(csidl As Long, SHGFP_TYPE As Long) As String
'---------------------------------------------------------------------------------------
' Procedure : GetFolderPath
' DateTime  : 20/02/2007 14.30
' Author    : Andrea
' Purpose   : Routine adattata GetFolderPath per leggere path es.
%programfiles%
'             es. completo:
http://vbnet.mvps.org/index.html?code/browse/csidl.htm
'---------------------------------------------------------------------------------------
'
Const MAX_LENGTH = 260
   Dim buff As String
   Dim dwFlags As Long
 
  'fill buffer with the specified folder item
   buff = Space$(MAX_LENGTH)
 
   If SHGetFolderPath(0, csidl Or dwFlags, -1, SHGFP_TYPE, buff) = S_OK
Then
 
       GetFolderPath = GetFolderPathTrimNull(buff)
 
   End If
 
End Function
Private Function GetFolderPathTrimNull(startstr As String) As String
'---------------------------------------------------------------------------------------
' Procedure : GetFolderPathTrimNull
' DateTime  : 20/02/2007 14.31
' Author    : Andrea
' Purpose   : Trim per GetFolderPath
'---------------------------------------------------------------------------------------
'
   GetFolderPathTrimNull = Left$(startstr, lstrlenW(StrPtr(startstr)))
 
End Function

 Bhe ti basta usare %programfiles%, uso una funzione abbozzata del genere:
??
Intanto ringrazio tutti per le risposte...
Caricando il tuo codice, VB mi dice che manca "SHGetFolderPath"...
Non c'è una funzione per dire che la cartella "c:\programmi\NomeProgramma" 
deve essere accessibile?
Grazie 

 deve essere accessibile?
No, questa serve solo per trasformare da %programfiles% nella relativa path
reale.
Era relativa all'uso di C:\programmi o C:\programi files

 Era relativa all'uso di C:\programmi o C:\programi files
Quindi in WinVISTA non c'è possibilità di far scrivere ad un programma 
dentro la cartella "c:\programmi\nomeprogramma"?
mi sembra strano...
ma purtroppo non ho trovato nulla fino ad oggi e mi stò preoccupando nel 
dover rifare l'intera applicazione :-(

"LupoNero"

il problema non e' vista
scritta dopo aver visto questo tuo post, e dopo aver creato la cartella 
ciccio
Private Sub Command1_Click()
    Open "c:\program files\ciccio\ciccio.txt" For Output As #1
    Print #1, Now
    Close #1
End Sub
ciccio.txt c'e', e contiene 04/10/2007 8.56.38
quindi -- uac a parte -- il punto sono i permessi. io ce li ho come utente. 
se il tuo utente non li ha, deve averli il programma.
ciao, a.

 dover rifare l'intera applicazione :-(
Gli fai dare i diritti completi alla cartella (\programmi o altro), o segui
gli altri consigli (che non ho mai provato comunque).

"Andrea [Work]"

ecco, l'area direi sia questa:
http://support.microsoft.com/?id=285879
cannalire diceva di usare
l'API LogonUser e successivamente la ImpersonateLoggedOnUser
ma io usavo w2k che in questo caso e' limitato (xp non mi sembra, vista non 
ne ho idea).
ciao, a.


Con un'installazione "normale e pulita" di windows vista, cioč senza 
definire autorizzazioni e/o protezioni il codice da te scritto non funziona 
a meno di non avviare l'applicazione come amministratore....
ho capito che devo scrivere i file sulle cartelle utente dei profili anche 
se la soluzione non mi piace...
Ciao 

 se la soluzione non mi piace...
anche in 2000/xp gli utenti normali non possono scrivere in \programmi.
per fortuna.
o setti i permessi della cartella
o dai permessi di admin al programma
o l'utente e' admin
scrivere nel profilo del singolo utente direi sia il meno.
piu' complesso se gli stessi dati devono essere condivisi.
ciao, a.