Newsgroup: it.comp.lang.delphi
Titolo: Problema autoavvio

Salve
fino ad oggi per lanciare un prog in auto andavo a scrivere nel registro:
HKEY_LOCAL_MACHINE  'Software\Microsoft\Windows\CurrentVersion\Run'
E' saltato fuori un problema al momento in cui ho attivato in Win XP Pro
l'account 'Guest'
Se mi connetto al pc come Guest ho una serie di errori dei programmi che
partono in auto, per lo + si tratta di AV.
I programmi non hanno restrizioni di accesso particolari, né è stato vietato
l'accesso al 'Guest' alla cartella programmi.
Ho provato a cambiare la chiave reg in
HKEY_CURRENT_USER  'Software\Microsoft\Windows\CurrentVersion\Run'
con il risultato che il prog parte si sull'account in cui è stato installato
(amministratore) ma poi negli altri account non parte nemmeno se lo eseguo
manualmente
'Impossibile accedere al file. E' probabile che non si disponga delle
autorizzazioni necessarie'
In realtà però non ho applicato nessuna restrizione al programma in
questione.
Non so proprio da cosa possa dipendere. (Delphi ad esempio parte sia
sull'amministratore che sul Guest senza problemi, come tutti gli altri prog
del resto).
Avviene solo per i miei programmi per i quali ho creato un installer tramite
InstallShield fornito con Delphi 5 (non ho usato settaggi particolari).
C'è qualcosa che non so?? Che mi sfugge?
Ciao e grazie
Andrea
--
Anco Soft
http://web.tiscali.it/ancosoft

No non ti sfugge nulla allora la chiave HKEY_LOCAL_MACHINE dovrebbe essere comune a tutti gli utenti mentre
HKEY_CURRENT_USER č valida solamente per l'utente loggato in quel momento.
Con XP ti consiglio di utilizzare un link sotto C:\Document and Settings\All Users\Menu avvio\Programmi\Esecuzione
Automatica.
Per avere la cartella esatta puoi usare
SelezionaCartellaParticolare(Handle, CSIDL_StartupAll));
Dove SelezionaCartellaParticolare č dichiarata cosi' (nota deve essere inclusa la unit ShellAPI):
Const
  CSIDL_DESKTOP            = $0000;         // Desktop
  CSIDL_PROGRAMS           = $0002;         // Programmi
  CSIDL_CONTROLS           = $0003;         // Controlli
  CSIDL_PRINTERS           = $0004;         // Stampanti
  CSIDL_PERSONAL           = $0005;         // Personali
  CSIDL_FAVORITES          = $0006;         // Preferiti
  CSIDL_STARTUP            = $0007;         // Iniziale
  CSIDL_RECENT             = $0008;         // Recenti
  CSIDL_SENDTO             = $0009;         // Invia a...
  CSIDL_BITBUCKET          = $000A;         // Cestino
  CSIDL_STARTMENU          = $000B;         // Start menu
  CSIDL_DESKTOPDIRECTORY   = $0010;         // Desktop Directory
  CSIDL_DRIVES             = $0011;         // Driver
  CSIDL_NETWORK            = $0012;         // Rete
  CSIDL_NETHOOD            = $0013;         // Risorse di rete
  CSIDL_FONTS              = $0014;         // Font
  CSIDL_TEMPLATES          = $0015;         // Nuovo...
  CSIDL_AvvioAll           = $0016;         // Menů avvio                (All user)
  CSIDL_ProgrammiAll       = $0017;         // Programmi                 (All user)
  CSIDL_StartupAll         = $0018;         // Esecuzione automatica     (All user)
  CSIDL_DesktopAll         = $0019;         // Desktop                   (All user)
  CSIDL_PreferitiAll       = $001F;         // Preferiti                 (All user)
  CSIDL_INTERNETTemp       = $0020;         // Temporanei Internet
  CSIDL_Cookies            = $0021;         // Cookies
  CSIDL_Cronologia         = $0022;         // Cronologia
  CSIDL_AppDataAll         = $0023;         // Dati applicazioni         (All user)
  CSIDL_WinDir             = $0024;         // WinDir
  CSIDL_SysDir             = $0025;         // SysDir
  CSIDL_IstPrograms        = $0026;         // Istallazione Programmi
  CSIDL_Documenti          = $0027;         // Documenti
  CSIDL_Administrator      = $0028;         // Administrator
  CSIDL_Sys32Dir           = $0029;         // Sys32Dir
  CSIDL_FileComuni         = $002B;         // File Comuni
  CSIDL_ModelliAll         = $002D;         // Modelli                   (All user)
  CSIDL_DocumentiAll       = $002E;         // Documenti                 (All user)
  CSIDL_AmministrazioneAll = $002F;         // Strumenti amministrazione (All user)
  CSIDL_Accessori          = $0030;         // Accessori
Type
  PSHItemID = ^TSHItemID;
  TSHItemID = record
                 cb   : word;
                 abID : array[0..0] of BYTE;
              end;
  PItemIDList = ^TItemIDList;
  TItemIDList = record
                   mkid: TSHITEMID;
                end;
function SHGetSpecialFolderLocation(hwndOwner : HWND;  nFolder   : integer; var ppidl     : PItemIDList) : HResult;
Stdcall;
                                                                            external 'Shell32.dll'
                                                                            name     'SHGetSpecialFolderLocation';
Function SelezionaCartellaParticolare(Handle   : HWND;
                                      Cartella : Integer) : String;
var
  pidlBrowse     : PItemIDList;
  pszPath        : array[0..MAX_PATH] of char;
  ppMalloc       : IMalloc;
  S              : String;
begin
  CoInitialize(Nil);
  CoGetMalloc(1, ppMalloc);
  S  := '';
  If SHGetSpecialFolderLocation(Handle, Cartella, pidlBrowse) = NOERROR Then
     try
      if (pidlBrowse <> nil) then
         begin
           SHGetPathFromIDList(pidlBrowse, @pszPath);
           S := StrPas(pszPath);
         end;
      finally
      end;
  ppMalloc.Free(pidlBrowse);
  CoUninitialize;
  Result := S;
end;
--
Ciao,
David

grazie
provo subito
ciao

Purtroppo niente.
stesso problema. Sembra che sia vietato l'accesso al file..
'Exception EInOutError in module.... File access is denied'

'Exception EInOutError'  te la da quando?
--
Ciao,
David

 --
 subito dopo che l'utente 'Guest' si è loggato e XP carica i programmi di
esecuzione automatica
purtroppo non trovo il modo di fare un debug appropriato, ma credo dipenda
da qualche settaggio particolare, altrimenti avrei dovuto avere lo stesso
errore sull'account dell'amministratore.
Pensavo che qualcuno avesse già avuto questo problema...
Il bello è che mi si presenta con tutti i programmini fatti da me che
partono in auto:
-uno scadenzario
-un monitor della connessione internet
-un programmino che cambia in automatico lo sfondo del desktop e che subito
dopo si chiude.
Tutti e 3 danno degli AV e runtime error sul 'Guest' ma vanno bene se mi
loggo da Admin
Mmah!!

 'Exception EInOutError in module.... File access is denied'
Da questo post non è chiaro se:
1. E' l'eseguibile che non riesce ad essere caricato/avviato (messaggio di
windows "Impossibile accedere al file...");
oppure
2. l'eseguibile parte correttamente, ma in una delle fasi di StartUp solleva
un'eccezione perchè tenta di accedere ad un file/cartella su cui non ha
diritti (eccezione sollevata con messaggio di Delphi).
Nel primo caso, potresti considerare l'ipotesi di fare un programma Starter,
che semplicemente avvia il tuo programma principale con credenziali
amministrative.
Nel secondo cavo, verifica che file leggi all'avvio e se quindi si tratta di
un problema di credenziali in questo senso.
Ciao,
Gianluca.