+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [Inno SetUp] Intercettare errore in fase di installazione

  1. #1
    abici non è in linea Novello
    Post
    21

    [Inno SetUp] Intercettare errore in fase di installazione

    Ciao a tutti!
    Sono nuovo e spero di riuscire a non fare troppe cavolate prima di imparare bene a muovermi in questo forum. Grazie per la comprensione!

    Ho sviluppato un software con vb che ora vorrei distribuire gratuitamente.
    Ho utilizzato InnoSetUp per creare il file di installazione. (Ringrazio chi ha pubblicato le guide di Inno SetUp: sono state utilissime per imparare a utilizzare il software)

    Ho però un problema:
    quando l'installer tenta di copiare dei file in cartelle con restrinzioni e non si è amministratori di sistema, l'installazione naturalmente si blocca e invia un messaggio di errore (Errore 5: accesso negato).
    Vorrei baipassare questo errore, evitando di far apparire il messaggio e dirottando la copia dei file in una cartella predefinita dove l'utente può avere accesso senza restrizioni.
    In pratica ho bisogno che alcuni file del programma vengano copiati in una determinata directory ma, se questo non è possibile per diritti di accesso alle cartelle, non vorrei precludere all'utente l'utilizzo di detti file.

    E' possibile risolvere il problema?

    Grazie!!!!

  2. #2
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Si è sicuramente risolvibile, dipende dalla strada che vuoi intraprendere, diciamo che se il tuo programma può essere installato da Utenti sprovvisti di diritti amministrativi bisognerebbe sempre e comunque mettere i file dove questi utenti possono leggerli/modificarli, sia come logica di programmazione, sia perchè i permessi di un utente possono essere modificato nel tempo, comunque:

    Questo presuppone che l'utente deve avere permessi amministrativi (se no viene richiesta la password)
    PrivilegesRequired=admin

    Poi puoi guardare queste funzioni e sceglere in base al sistema operativo cosa fare

    IsPowerUserLoggedOn
    IsAdminLoggedOn

    Però ripeto, se dei file possono essere installati/usati anche da chi non ha i massimi permessi andrebbero sempre messi dove ci sono i massimi permessi.
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  3. #3
    abici non è in linea Novello
    Post
    21
    Ti ringrazio per la risposta.
    Anche se non mi sono ancora cimentato con gli script di InnoSetUp, spero di riuscire a utilizzare le funzioni che mi hai indicato.

  4. #4
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,856
    Non capisco bene il problema. O meglio, non capisco la soluzione.
    Se i file di cui si parla sono utilizzati dal programma per cui hai creato il setup, immagino che debbano andare a finire in una cartella ben precisa nella quale il programma stesso si aspetterà di trovarli. Perché dirottarli altrove?
    Insomma di che file si tratta e, soprattutto, dove tenti di posizionarli?

    Il regolamento del forum: la prima cosa da leggere.

  5. #5
    abici non è in linea Novello
    Post
    21
    Il programma è impostato in modo da cercare alcuni file in una cartella dove, in fase di installazione, può scrivere solo chi ha i privilegi di amministratore. Ed è una impostazione che mi interessa mantenere.
    Io però ho bisogno che alcuni utenti possano installare il software anche se non sono amministratori di sistema e che, nel contempo, possano utilizzare questi file. Quindi, in base ai privilegi dell'utente, ho due tipi diversi di installazione con un solo setup.
    Naturalmente è il software che, in relazione all'utente loggato, saprà dove andare a cercare questi file.
    Sembra un po' tutto contorto, ma spero di aver chiarito le idee.

  6. #6
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    La domanda sia mia che di Brontolo è perchè questi file vanno installati in un "posto" che richiede privilegi amministrativi per accedere.
    L'unica risposta che mi viene in mente è che un utente normale non deve poterli toccare in caso di installazione su macchine con multiutenza, se non è così c'è qualcosa che non va nel concetto alla base del programma, oppure c'è un altra spiegazione logica che non mi viene in mente.

    Comunque le funzioni che ho postato sono sufficenti a fare quello che hai chiesto, se non sai come chiedi.
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  7. #7
    abici non è in linea Novello
    Post
    21
    Si, anche se con un po' di difficoltà, sono riuscito a utilizzare le funzioni che mi hai indicato. Grazie!
    Questo è lo script per controllare se un utente è amministratore:

    [Code]
    Function Admin(): Boolean;
    Begin
    Result := False;
    If IsAdminLoggedOn() Or IsPowerUserLoggedOn() Then
    Begin
    Result := True;
    End
    End;


    Per ciò che riguarda la domanda sul software, l'idea è quella di effettuare una normale installazione (da amministratore) con i file consultabili da tutti gli utenti di una stessa macchina e soprattutto, con riferimenti nel registro di sistema, per controllare eventuali reinstallazioni del programma stesso. Nel caso però che l'utente non avesse i privilegi di amministratore, mi piacerebbe che il programma fosse comunque installato sul pc. Tutto qui!
    E' una condizione che però sto rivedendo perchè, nella seconda situazione, non riesco a controllare eventuali reinstallazioni del programma effettuate da altri utenti.
    A tal proposito è possibile con innosetup controllare se un programma è già presente sul pc anche se non si hanno riferimenti nel registro di sistema? Cosa posso controllare per valutarne l'esistenza?

  8. #8
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    [QUOTE=abici;202443]Si, anche se con un po' di difficoltà, sono riuscito a utilizzare le funzioni che mi hai indicato. Grazie!
    Questo è lo script per controllare se un utente è amministratore:

    codice:
    [Code]
    Function Admin(): Boolean;
      Begin
        Result := False;
        If IsAdminLoggedOn() Or IsPowerUserLoggedOn() Then
          Begin
            Result := True;
          End
    End;
    Sì, cosi va bene, non sarebbe più semplice però una funzione che restituisce direttamente il percorso base dei file in base a Admini/NonAdmin.

    Quote Originariamente inviato da abici Visualizza il messaggio
    Per ciò che riguarda la domanda sul software, l'idea è quella di effettuare una normale installazione (da amministratore) con i file consultabili da tutti gli utenti di una stessa macchina e soprattutto, con riferimenti nel registro di sistema, per controllare eventuali reinstallazioni del programma stesso. Nel caso però che l'utente non avesse i privilegi di amministratore, mi piacerebbe che il programma fosse comunque installato sul pc. Tutto qui!
    E non puoi (come si dovrebbe) mettere questi file sempre nella caretella che non richiede privilegi amministrativi?

    Quote Originariamente inviato da abici Visualizza il messaggio
    E' una condizione che però sto rivedendo perchè, nella seconda situazione, non riesco a controllare eventuali reinstallazioni del programma effettuate da altri utenti.
    A tal proposito è possibile con innosetup controllare se un programma è già presente sul pc anche se non si hanno riferimenti nel registro di sistema? Cosa posso controllare per valutarne l'esistenza?
    Si, si può, ma devi aprire un altra discussione, se no siamo OT
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  9. #9
    abici non è in linea Novello
    Post
    21
    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    ...non sarebbe più semplice però una funzione che restituisce direttamente il percorso base dei file in base a Admini/NonAdmin.
    Sì, che sarebbe più semplice! Ma come si fa?

    Fin'ora, in base alle conoscenze acquisite con le tue guide, ho seguito questo metodo:
    - una funzione 'A' che mi restitusce 'True' se l'utente è amministratore;
    - una funzione 'B' che mi restitusce 'True' se l'utente non è amministratore;
    - nella sezione [File] due righe:
    1 - Source: xxxx.txt; DestDir: "C:\AAAA\"; Flags: ignoreversion; Check: A
    2 - Source: xxxx.txt; DestDir: "C:\BBBB\"; Flags: ignoreversion; Check: B

    Il codice è un po' macchinoso e poco semplificato, ma fa quello che gli chiedo.

    Come faccio a indicargli semplicemente il percorso che il setup deve applicare?

  10. #10
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Quote Originariamente inviato da abici Visualizza il messaggio
    Sì, che sarebbe più semplice! Ma come si fa?

    Fin'ora, in base alle conoscenze acquisite con le tue guide, ho seguito questo metodo:
    - una funzione 'A' che mi restitusce 'True' se l'utente è amministratore;
    - una funzione 'B' che mi restitusce 'True' se l'utente non è amministratore;
    - nella sezione [File] due righe:
    1 - Source: xxxx.txt; DestDir: "C:\AAAA\"; Flags: ignoreversion; Check: A
    2 - Source: xxxx.txt; DestDir: "C:\BBBB\"; Flags: ignoreversion; Check: B

    Il codice è un po' macchinoso e poco semplificato, ma fa quello che gli chiedo.

    Come faccio a indicargli semplicemente il percorso che il setup deve applicare?
    codice:
    [Files]
    Source: xxxx.txt; DestDir: "{code:LeggiPathDati}"; Flags: ignoreversion
     
    [Code]
     
    Function LeggiPathDati(Param: String): String;
      Begin
        If IsAdminLoggedOn() Or IsPowerUserLoggedOn() Then
          Result:= 'PercorsoAdmin'
        Else
          Result:= 'PercorsoUser' 
      End;
    Attenzione che non ho InnoSetup sottomano, potebbero esserci degli errori, ma l'idea è questa.
    Ultima modifica di spikexx84; 24-09-2010 09:53 
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi