Access to *.pdf was denied

di il
7 risposte

Access to *.pdf was denied

Buonasera a tutti,

il produttore di un componente Delphi per la conversione di un'immagine PDF in un file PDF ricercabile non mi sa rispondere, quindi provo di porre la domanda qui, anche se è piuttosto generica:

Eseguendo il codice suggerito da tale produttore all'interno di una VCL viene correttamente creato un file PDF ricercabile di 47.206 byte che si apre correttamente; nelle sue proprietà di sicurezza sono elencati gli utenti e gruppi System, Utente loggato e Administrators.

Eseguendo lo stesso codice all'interno di un thread di Windows Service viene creato sempre un file PDF di 47.206 byte, quindi presumo identico a quello prodotto dalla VCL, il quale però nelle sue proprietà di sicurezza non riporta alcun utente o gruppo e che non è apribile, dando l'errore "Access to *.pdf was denied".

A qualcuno di voi è mai capitato che un servizio Windows abbia creato un file con delle proprietà di sicurezza vuote mentre con una VCL il problema non si poneva?

Ale 

7 Risposte

  • Re: Access to *.pdf was denied

    Sinceramente non mi sono mai posto il problema di controllare se stampo su una ho o una epson come non mi sono mai preoccupato di generare un pdf da codice...

    Uso i controlli pdf di fast report o la pdf creator...

    Pdf, in origine portable file document creato per avere un file che viene stampato per come si presenta.

    Prima i file perdevano l'impaginazione e i caratteri in base alla stampante con la quale si stampava il file finché non è stato creato il pdf. In pratica un file di stampa.

    Poi i pdf sono diventati A, B, modificabili ecc...

    Se usi il codice devi sapere cosa stai creando... Un pdf può recare con se una firma, un token per firma remota, ecc.. allontanandosi da ciò per cui è stato ideato.

    O studi i pdf o lasci fare ai controlli del report che traducono quello che stampi in pdf o ti affidi alla stampante su file.

    27/11/2024 - al.delphi ha scritto:

    elencati gli utenti e gruppi System, Utente loggato e Administrators.

    Onestamente non ho mai voluto sbirciare sulle info del pdf... Eppure li apro anche con programmi di grafica.

    Il fornitore? È di terze parti? Cambia fornitore.

    27/11/2024 - al.delphi ha scritto:

    il produttore di un componente Delphi per la conversione di un'immagine PDF in un file PDF ricercabile non mi sa rispondere,

    E se non lo sa lui...

    Stampa il pdf dal controllo report...

  • Re: Access to *.pdf was denied

    Ciao Andrea,

    grazie della tua risposta. Conosco bene il formato PDF e avevo già creato un servizio Windows funzionante per la conversione di file PDF. Volevo ora solamente sostituire parte di tale mio codice con un componente esterno per rendere meno complesso il mio codice.

    Speravo in qualche osservazione generica di un programmatore del forum per poter capire l'eventuale causa della mancanza delle proprietà di sicurezza in un file creato da un servizio Windows.

    Ale

  • Re: Access to *.pdf was denied

    28/11/2024 - al.delphi ha scritto:

    Speravo in qualche osservazione generica di un programmatore del forum per poter capire l'eventuale causa della mancanza delle proprietà di sicurezza in un file creato da un servizio Windows.

    Allora dovresti specificare qual è questo componente terzista... Anche se rivelarlo sarebbe poco etico come poco etico è liquidare un "cliente" che segnala un bug.

  • Re: Access to *.pdf was denied

    Ciao Andrea,

    non credo si tratti di un bug, solamente di un comportamento non pianificato dal produttore. In determinate circostanze, infatti, il componente funziona.

    Prova fatta ora: eseguendo il mio servizio Windows non come "account di sistema locale" ma come "utente + password" (proprietà "Connessione" del servizio Windows), il file PDF prodotto risulta apribile e dispone delle relative informazioni di sicurezza nelle sue prorietà. Deduco che il file PDF abbia ereditato i diritti dall'esecutore del servizio Windows.

    Questo spiega perché il componente risulta funzionante all'interno di una VCL avviata da utente Windows.

    Il problema si può quindi risolvere in fase di installazione dell'applicativo, impostando nelle proprietà del servizio Windows l'esecuzione tramite utente Windows invece del sistema locale. Ora che ho ben chiaro la natura del problema, però sfrugherò nel componente per trovare una soluzione che permette di eseguire il servizio Windows con l'impostazione predefinita "sistema locale".

    Grazie ancora, Ale

  • Re: Access to *.pdf was denied

    28/11/2024 - al.delphi ha scritto:

    Prova fatta ora: eseguendo il mio servizio Windows non come "account di sistema locale" ma come "utente + password" (proprietà "Connessione" del servizio Windows), il file PDF prodotto risulta apribile e dispone delle relative informazioni di sicurezza nelle sue prorietà. Deduco che il file PDF abbia ereditato i diritti dall'esecutore del servizio Windows.

    Esattamente. I servizi Windows in genere sono configurati con un account utente specifico perché devono poter girare anche quando non si fa accesso al desktop, e quindi non c'è un utente che esplicitamente fa il login e lancia manualmente l'applicazione.

    In genere ci sono degli account "di servizio" (scusa il gioco di parole), ma è possibile modificarlo, esattamente come hai provato tu.

    28/11/2024 - al.delphi ha scritto:

    Ora che ho ben chiaro la natura del problema, però sfrugherò nel componente per trovare una soluzione che permette di eseguire il servizio Windows con l'impostazione predefinita "sistema locale".

    Il componente non ha alcun ruolo in questo frangente. Devi agire all'esterno del componente stesso.

    Non è dato sapere di che libreria si tratti, comunque sia do per scontato che il componente possa renderizzare il PDF anche usando un TStream e non necessariamente un percorso diretto di output, quindi puoi sempre ottenere i dati del PDF e scrivere tu il file, specificando diverse opzioni o anche chiamando altre API contestualmente alla scrittura per ottenere il risultato.

  • Re: Access to *.pdf was denied

    Ciao Marco,

    grazie per la conferma. La prima versione del mio servizio crea dei files PDF utilizzando "YuPdf", un componente che permette di gestire i singoli elementi contenuti durante la composizione di un file PDF. Appena finalizzato il file, il servizio, eseguito dal sistema locale, lo sposta nella cartella di destinazione dove il file PDF risulta accessibile.

    Ora, per facilitare lo sviluppo del servizio, ho sostituito YuPdf con "IEVision" che genera i files PDF in automatico, specie "black box". IEVision però rende i PDF solo accessibili se il servizio viene eseguito da un account utente. Se questo aspetto dovesse diventare cruciale tenterò utilizzare TStream come da te indicato o tornerò a YuPdf.

    Ale

  • Re: Access to *.pdf was denied

    02/12/2024 - al.delphi ha scritto:

    IEVision però rende i PDF solo accessibili se il servizio viene eseguito da un account utente. Se questo aspetto dovesse diventare cruciale tenterò utilizzare TStream come da te indicato o tornerò a YuPdf.

    Come predetto, non penso che le problematiche siano legate all'uso di questa o quell'altra libreria, quanto più a come i file vengono creati dal processo e dall'utente che esegue quest'ultimo. Senza codice o altri elementi comunque, non saprei dire molto di più. :)

Devi accedere o registrarti per scrivere nel forum
7 risposte