Newsgroup: it.comp.lang.delphi
Titolo: Scrivere nel registro in Vista

Copiando qua e là ho creato un programma per registrare nel registro windows 
un exe che deve partire allo Startup. Qunado tenta di scrivere la chiave nel 
registro fallisce con un "Failed to create key ...", errore che non si 
verifica se disattivo il controllo UAC di Vista.
Una ulteriore ricerca mi ha indirizzato sulla soluzione, trovata in due 
diversi siti (quasi uguali): Un file di risorse (RunOnStartup.RC) che 
dovrebbe elevare i permessi e permettere al mio exe di registrare la chiave. 
Si compila RunOnStartup.RC con bcc32.exe e diventa .REC. Il problema è che 
la soluzione non funziona e mi dà lo stesso errore originario. Oppure sono 
io che faccio qualcosa di sbagliato...
Il mio project file è il seguente:
program RunOnWinStartP;
uses
  Forms,
  RunOnWinStartU in 'RunOnWinStartU.pas' {Form1};
 //{$R *.res}  // questa è la riga generata automaticamente
  // questa sotto è la riga da me introdotta: il primo file è il risorse 
normale, il secondo è quello di cui sopra
  {$R 'RunOnWinStartP.res' 'RunOnStartUp.REC'}
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
La esecuzione fallisce proprio sullo statement:
    RegIniFile.WriteString('Software\Microsoft\Windows\CurrentVersion\Run'#0,WindowTitle, 
CommandLn);
Qualcuno può aiutarmi (o suggerire un'altra soluzione) ?

Nessuno ne sa niente ?

Qual'è il contenuto del file di risorse?
In questi casi per aggirare l'UAC di solito si implementa un manifest
che dispone diritti amministrativi.
Se cerchi per manifest trovi diverse soluzioni.
Andrea

 ha scritto nel messaggio 
news:b09f3b12-a9f3-436e...@k13g2000vbq.googlegroups.com...
Qual'č il contenuto del file di risorse?

Andrea
Il contenuto č appunto un manifest che ho proprio trovato sulla rete. L'ho 
chiamnato RunOnStartup.manifest e si presenta cosģ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.1.1.1"
processorArchitecture="X86"
name="RunOnWinStartP.exe"
type="win32"/>
<description>elevate execution level</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Ho anche creato un file RunOnStartup.RC:
1 24 "RunOnStartUp.manifest"
che poi ho compilato con brcc32.exe ricavandone il file RunOnStartup.REC, 
che non sapevo bene come inserire insieme al file di risorse standard *.RES. 
Provando, ho trovato che questa riga č accettata e non dą errore di 
compilazione:
{$R 'RunOnWinStartP.res' 'RunOnStartUp.REC'}
(dove RunOnWinStartP č appunto il mio project file creato per testare tutto 
il marchingegno,; la esecuzione del mio programma si interrompe con l'errore 
citato rporpio quando tento di scrivere sul registro, errore che non avviene 
disabilitando lo UAC).

lascia stare per un attimo il compilatore di risorse...
Rinomina il tuo manifest così
RunOnWinStartP.exe.manifest
e includilo nella dir del programma. Prova a lanciare e vedi che
succede.

 ha scritto nel messaggio 
news:3ac4a77d-0d8e-4f81...@fu15g2000vbb.googlegroups.com...
lascia stare per un attimo il compilatore di risorse...
Rinomina il tuo manifest cos�
RunOnWinStartP.exe.manifest
e includilo nella dir del programma. Prova a lanciare e vedi che
succede.
Scusa, spiegami meglio. Dovrei:
- il file attuale "RunOnStarup.manifest" (source che contiene quel testo del 
mio prec msg), rinominarlo "RunOnWinStartP.exe.manifest"
- nel mio project di prova, come faccio a referenziarlo ? (come fa il 
programma a sapere di questo manifest?)
- non dovrei ricompilarlo ?

 - non dovrei ricompilarlo ?
Non serve, basta dare al manifest lo stesso nome del programma e
metterlo nella stessa cartella. Non devi includere nessuna direttiva
{$R .....

 ha scritto nel messaggio 
news:45f9c51f-9e22-4043...@w2g2000vbp.googlegroups.com...

Allora, ho provato a rinominare il manifest con lo stesso nome del programma 
di test "RunOnWinStartP.exe.manifest" e ho provato anche con il nome 
"RunOnWinStartP.manifest", ma purtroppo mi dà sempre lo stesso errore.
Da qui ho tratto spunto per quello che ho fatto:
http://delphi.about.com/od/delphitips2009/qt/delphi-vista-registry-run-on-startup.htm
Peccato che non riesco a farlo funzionare. Ho provato di nuovo a 
disabilitare la UAC e la registrazione della mia chiave sul registro 
favviene, quindi è certamente un problema di acquisire l'autorizzazione 
necessaria in fase di programma. 

In verità non si dovrebbe scrivere in HKLM ma in HKCU dove l'UAC non
interviene

 ha scritto nel messaggio 
news:8cbe92b6-41b1-42c4...@k9g2000pre.googlegroups.com...
In verità non si dovrebbe scrivere in HKLM ma in HKCU dove l'UAC non
interviene
Senza capirne molto, ho eseguito quanto suggerito nel sito indicato nel mio 
precedente messaggio. Poi ho trovato anche altri riferimenti, nache se mi 
sono sembrati tutti copie uno dell'altro..
Conclusione, non ne vengo fuori.
Abbandonando questa strada ne ho un'altra ?
Praticamente io , da programma, voglio che l'utente, cliccando un bottone, 
possa decidere di fare avviare il programma alla partenza di Windows..