Newsgroup: it.comp.lang.delphi
Titolo: Privilegi su Vista

Salve,
ho un programma che gira ormai da anni senza problemi su macchine con XP.
Si è verificato un problema però installando tale programma su alcuni PC con 
Vista.
Il problema che ripeto si è verificato solo su alcune postazioni con Win 
Vista, ma non su tutte è che all'avvio il programma non parte ed il sistema 
lancia un messaggio
"programma.exe ha smesso di funzionare".
Ho gurdato un pò in giro e credo sia dovuto a questioni di privilegi su 
Vista. Ho trovato anche un .manifest da integrare all'eseguibile ma non sò 
se questa sia effettivamente la soluzione adeguata.
Volevo sapere se qualcuno ha già avuto tale problema e se si come ha 
risolto.
Intanto posto il manifest così come l'ho trovato. Sarà corretto?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="programma.exe"
     type="win32"/>
  <description>descrizione programma</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly> 

 Vista. [...]
Credo che il problema non stia nella presenza specifica di un "manifest".
Dovresti verificare cosa fa il tuo programma all'avvio.
Ad esempio, potrebbe tentare di aggiornare un file che si trova nella 
cartella del programma, operazione che è inibita su Vista (non puoi 
scrivere nella cartella "Programmi"), o in una cartella analoga.
Quali sono le operazioni che il tuo programma effettua all'avvio?
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

> Quali sono le operazioni che il tuo programma effettua all'avvio?
Il programma al primo avvio crea una dll in system e un log nella propria 
cartella in programmi. Il punto è tutto qui, lo so. Ma non so come risolvere 
il problema. Non posso fare a meno di creare questi file.
Pensavo che aggiungendo un manifest con privilegi di Amministratore avrei 
risolto.
Ho verificato infatti che in alcune postazioni con Vista il problema non si 
pone, credo in quelle loggate come amministratore, ma questo non l'ho 
verificato con certezza..
Chiedevo se avevate info a riguardo 

Ciao,
io un problema simile l'ho risolto spostando tutto quello che creo 
modifico o distruggo in una cartella comune tipo document and 
setting/All users/mio programma/
Qui Vista ti fa fare che ti pare ai tuoi file. Se poi devi diversificare 
le configurazioni per ogni utente semplicente scegli la cartella 
dell'utente interessato.
Saluti
***Gio***

per i file da creare visto che sono  temporanei, utilizza la cartella
temp di windows
per determinarla usa questa funzione, ciao Brunello
function GetTempDir: string;
var
  Buffer: array[0..MAX_PATH] of Char;
begin
  GetTempPath(SizeOf(Buffer) - 1, Buffer);
  Result := StrPas(Buffer);
end;

Rispondo a Brunello che i file che creo non sono temporanei e quindi 
l'ipotesi temp non va. E comunque ci deve essere pure un modo per scrivere 
nelle cartelle di sistema sotto vista!!!!
Penso solo a quei programmi che in fase di installazione scompattano 
innumerevoli dll o altro in system (photoshop, nero burning, flash, etc...)
L'idea di scrivere in doc&sett non è male, ma è riferita all'utente loggato, 
non al sistema. 

 il problema. Non posso fare a meno di creare questi file. [...]
Il log può essere salvato in una cartella differente, ad esempio quella 
dell'utente collegato ("C:\Users\Nome\...").
Sulla copia della DLL in System... perché dovrebbe servirti una cosa 
simile? Cosa fa il tuo programma? :-)


 non al sistema.
Le impostazioni dei programmi condivise da tutti gli utenti dovrebbero 
essere memorizzate nella cartella "C:\ProgramData".
Dovresti usare la funzione API "SHGetKnownFolderPath" 
(
http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx
) per 
ottenere i percorsi effettivi.


 ottenere i percorsi effettivi.
Ok grazie mille.
Per evitare complicazioni eviterò di scrivere nelle cartelle di sistema.
Comunque per info e spero possa essere utile al ng, ho verificato che il 
manifest che ho postato in precedenza risolve parzialmente il problema: il 
programma adesso parte ma Vista lancia un prompt e chiede conferma 
all'utente.
Ciao
Andrea