none
Utilità di pianificazione

    Question

  • Buongiorno a tutti,

    ho implementato una procedura per aprire un file excel e compilarlo con i dati risultanti da una elaborazione.

    La procedura funziona correttamente, se eseguita manualmente, i problemi iniziano quando questa attività viene schedulata ed eseguita automaticamente su un server 2008.

    L'applicazione parte all'ora impostata, ma quanto tenta di aprire excel si blocca senza dare nessun errore.

    Da notare che l'applicazione viene schedulata ed eseguita con diritti di amministratore, gli stessi che utilizzo quando la eseguo da riga comando.

    Una cosa strana è che schedulando l'attività impostando le opzioni di protezione a livello di gruppo BUILTIN/administrators, si attiva solo l'opzione "esegui solo se l'utente è connesso" e così funziona, ma ovviamente il server deve sempre rimanere loggato. Se invece fisso le opzioni di protezione a livello di utente <DOMINIO>\Administrator, posso impostare l'opzione "esegui indipendentemente dalla connessione dell'utente", ma la procedura si blocca all'apertura del file excel.

    Come se l'utente non abbia i diritti per aprire excel, mi chiedo a questo punto come mai lo stesso utente manualmente esegue l'operazione senza problemi?

     Ringrazio anticipatamente chiunque mi può dare idee per la risoluzione del problema.

    PeterCs

    Monday, November 05, 2012 7:47 PM

Answers

  • Guardando il tuo codice vedo che viene utilizzato l'oggetto  Excel application  e come scritto precedentemente

    uno dei possibili problemi potrebbe essere questo :

    Interattività con il desktop: l'esecuzione delle applicazioni di Office presume un desktop interattivo. Inoltre, in alcune circostanze, il corretto funzionamento di determinate funzioni di automazione potrebbe richiedere la visibilità delle applicazioni stesse. Office è progettato in modo tale che, se si verifica un errore imprevisto o se un parametro non specificato è necessario per il completamento di una funzione, venga visualizzata una finestra di dialogo modale in cui si richiede all'utente di scegliere come proseguire. Poiché in un desktop non interattivo una finestra di dialogo modale non può essere eliminata, il thread si blocca a tempo indeterminato. Alcune pratiche di scrittura del codice consentono di ridurre il rischio di tale inconveniente, ma non sono in grado di eliminarlo del tutto. Questo unico fatto rende, di per sé, rischiosa e priva di supporto l'esecuzione di applicazioni di Office da un ambiente sul lato server.


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!

    Tuesday, November 06, 2012 7:45 PM
  • Era per precisare, temevo che se qualcuno avesse letto in futuro il post, avrebbe potuto avere dei dubbi...

    Sfortunatamente il nostro PeterCs utilizza 2008, se avesse utilizzato una versione SO precedente a vista (2003/xp/2000/nt), l'oggetto COM excel.application avrebbe avuto molte più possibilità di funzionare (finestre modali permettendo) segliendo "Allow service to interact with desktop"  .

    La modalità interattiva per task/servizi è stata tolta da vista in poi come spiegato qui  http://technet.microsoft.com/en-us/library/cc756339(WS.10).aspx ; ma l'argomento mi interessa in modo particolare e vorrei capire come prendere "nuovamente" possesso  della sessione0 .

    PeterCe  ho torvato il seguente 3d e il post di Ogawa è promettente, potresti tentare la cosa e farci sapere se funziona.

    :: cmd eseguito come administrator
    mkdir  C:\Windows\SysWOW64\config\systemprofile\Desktop
    mkdir C:\Windows\System32\config\systemprofile\Desktop
    ::

    http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef91

    altro link è interessante

    http://www.codeproject.com/Articles/110568/Alternative-way-for-Window-services-to-interact-wi

    Ciao

    Gas


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!


    Saturday, November 10, 2012 2:20 PM

All replies

  • Poresti spiegare come hai implementato questa procedura vbscipt/powershell/jscript/rexx/perl...  e usi l'oggetto excel application?

    Senza info azzardo una spiegazione

    Il problema dovrebbe essere legato ai task schedulati come "esegui indipendentemente dalla connessione dell'utente"  non sono più interattivi (questo da vista in poi), mentre quelli settati come "esegui solo se l'utente è connesso" sono interattivi equivale ad una esecuzione manuale...

    Considerations for server-side Automation of Office http://support.microsoft.com/kb/257757

    Dovresti utilizzare prodotti espressamente progettati per essere eseguiti in maniera automatica/non interattiva /lato server cosa non prevista per l'oggetto excel application, prova a dare un occhio anche a questo pacchetto   http://epplus.codeplex.com/ nato espressamente per supportare l'automazione via programmazione


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!

    Monday, November 05, 2012 10:34 PM
  • a naso ritengo che il problema è che l'apertura del file excel richiede l'interfaccia grafica quindi vuole una sessione loggata.


    Edoardo Benussi
    Microsoft MVP
    edo[at]mvps[dot]org

    Tuesday, November 06, 2012 11:52 AM
  • fcEXCEL functional class

    La procedura è sviluppata in Gupta/Centura e si appoggia alla classe funzionale fcEXCEL.

    Riporto di seguito la sintassi di inizializzazione, l'ultima riga è dove si blocca

    m_oExcel.bInitialized
    m_oExcel.Create( Excel.Application )
    m_oExcel.m_oExcel.Invoke ("Workbooks", INVOKE_GET)
    m_oExcel.m_oExcel.PopObject (-1, oBooks)
    m_oExcel.m_oExcel.FlushArgs ()

    Set p_sTmpl = p_sFileName
    oBooks.PushString (p_sTmpl)
    oBooks.Invoke ("open", INVOKE_FUNCTION)

    Tuesday, November 06, 2012 3:22 PM
  • Guardando il tuo codice vedo che viene utilizzato l'oggetto  Excel application  e come scritto precedentemente

    uno dei possibili problemi potrebbe essere questo :

    Interattività con il desktop: l'esecuzione delle applicazioni di Office presume un desktop interattivo. Inoltre, in alcune circostanze, il corretto funzionamento di determinate funzioni di automazione potrebbe richiedere la visibilità delle applicazioni stesse. Office è progettato in modo tale che, se si verifica un errore imprevisto o se un parametro non specificato è necessario per il completamento di una funzione, venga visualizzata una finestra di dialogo modale in cui si richiede all'utente di scegliere come proseguire. Poiché in un desktop non interattivo una finestra di dialogo modale non può essere eliminata, il thread si blocca a tempo indeterminato. Alcune pratiche di scrittura del codice consentono di ridurre il rischio di tale inconveniente, ma non sono in grado di eliminarlo del tutto. Questo unico fatto rende, di per sé, rischiosa e priva di supporto l'esecuzione di applicazioni di Office da un ambiente sul lato server.


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!

    Tuesday, November 06, 2012 7:45 PM
  • Ti ringazio per il supporto, temevo qualcosa del genere, ma speravo fino all'ultimo che non fosse così.

    Valuterò di spostare l'operazione su una macchina client.

    Grazie ancora

    PerterCs

    Thursday, November 08, 2012 5:22 PM
  • Ti ringazio per il supporto, temevo qualcosa del genere, ma speravo fino all'ultimo che non fosse così.

    Valuterò di spostare l'operazione su una macchina client.

    mi pare tu non abbia colto il nocciolo delle risposte che ti sono state date: la cosa non funzionerà neanche su un client.

    non è il sistema operativo che impedisce l'esecuzione ma la modalità in cui la vuoi far eseguire.

    ciao.


    Edoardo Benussi
    Microsoft MVP
    edo[at]mvps[dot]org

    Friday, November 09, 2012 7:49 AM
  • Scusa ma la questione è chiarissima, la condizione per cui il task non si blocchi è che la postazione sia presieduta(interattiva).

    Anche lato server, come avevo detto aprendo il post, la procedura si blocca solo se la macchina non è loggata, viceversa funziona.

    La mia speranza era di poterla eseguire anche su server non loggato. ( Su di esso girano altri task simili ma non aprono Excel )

    Non potendo lasciare il server sempre loggato, l'unica soluzione che posso applicare è spostare il task su una macchina client, costantemente presieduta(loggata).

    Ti ringrazio per la precisazione.

    PeterCs

    Friday, November 09, 2012 9:30 PM
  • la questione diventa chiarissima solo ora perchè spieghi che secondo te un sistema server non è sempre loggato mentre un client è costantemente presieduto. nella mia logica invece qualunque macchina, client o server che sia, può compiere operazioni sia con un account loggato in sessione interattiva sia senza che ci sia un account loggato, l'importante è capire come debbano essere programmate le applicazioni per funzionare in un caso o nell'altro. a titolo di puro esempio un eseguibile se convertito in servizio può essere mandato in esecuzione sulla macchina senza che alcun account sia loggato.

    grazie a te per avermi dato l'opportunità di chiarire questo concetto.

    ciao.


    Edoardo Benussi
    Microsoft MVP
    edo[at]mvps[dot]org

    Saturday, November 10, 2012 8:10 AM
  • ....

     a titolo di puro esempio un eseguibile se convertito in servizio può essere mandato in esecuzione sulla macchina senza che alcun account sia loggato.

    Edoardo, la tua affermazione è corretta, se e solo se l'eseguibile in questione non richiede una "sessione interattiva".

    Ciao


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!

    Saturday, November 10, 2012 9:16 AM
  • ....

     a titolo di puro esempio un eseguibile se convertito in servizio può essere mandato in esecuzione sulla macchina senza che alcun account sia loggato.

    Edoardo, la tua affermazione è corretta, se e solo se l'eseguibile in questione non richiede una "sessione interattiva".

    si, dai, coraggio, è da tre post che la meno con l'interattività della sessione e c'era bisogno di questa precisazione ? :-D


    Edoardo Benussi
    Microsoft MVP
    edo[at]mvps[dot]org

    Saturday, November 10, 2012 12:56 PM
  • Era per precisare, temevo che se qualcuno avesse letto in futuro il post, avrebbe potuto avere dei dubbi...

    Sfortunatamente il nostro PeterCs utilizza 2008, se avesse utilizzato una versione SO precedente a vista (2003/xp/2000/nt), l'oggetto COM excel.application avrebbe avuto molte più possibilità di funzionare (finestre modali permettendo) segliendo "Allow service to interact with desktop"  .

    La modalità interattiva per task/servizi è stata tolta da vista in poi come spiegato qui  http://technet.microsoft.com/en-us/library/cc756339(WS.10).aspx ; ma l'argomento mi interessa in modo particolare e vorrei capire come prendere "nuovamente" possesso  della sessione0 .

    PeterCe  ho torvato il seguente 3d e il post di Ogawa è promettente, potresti tentare la cosa e farci sapere se funziona.

    :: cmd eseguito come administrator
    mkdir  C:\Windows\SysWOW64\config\systemprofile\Desktop
    mkdir C:\Windows\System32\config\systemprofile\Desktop
    ::

    http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef91

    altro link è interessante

    http://www.codeproject.com/Articles/110568/Alternative-way-for-Window-services-to-interact-wi

    Ciao

    Gas


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!


    Saturday, November 10, 2012 2:20 PM
  • Ho creato la cartella C:\Windows\System32\config\systemprofile\Desktop, reimpostato i parametri di avvio del task nella modalità "utente" con l'opzione "esegui indipendentemente dalla connessione dell'utente" e funziona, nel senso che non si blocca all'apertura di Excel.
    Fa
    ccio ulteriori verifiche e nei prossimio giorni vi saprò dire.

    Grazie mille per il supporto

    PeterCs


    Monday, November 12, 2012 12:22 PM
  • Abbiamo fatto un passo avanti, questo spiegherebbe perchè si parla di "interact with desktop" e adesso ho anche capito che funzione ha questo folder C:\Windows\System32\config\systemprofile (dovevo capire dal nome "system profile").

    Appena ho tempo faccio qualche prova, ma ho fiducia dovrebbe funzionare "finestre modali permettendo", ovviamente sei in uno scenario non supportato da Microsoft ....


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE! Ricorda di dare un occhio anche QUI

    Monday, November 12, 2012 1:25 PM
  • Confermo, funziona tutto come aspettato.

    I task schedulati il 15 novembre sono stati eseguti senza problemi.

    Ora imposterò nello stesso modo anche quelli che dovranno partire ogni inizio mese.

    La cartella C:\Windows\System32\config\systemprofile\Desktop è vuota, mi aspettavo di trovare un file di log con l'attività eseguita.

    Che venga usata solo in caso di anomalie?

    Saturday, November 17, 2012 4:22 PM
  • Confermo, funziona tutto come aspettato.

    Perfetto, non ti rimane cliccare su "Segna come Risposta", abbiamo risolto!

    La cartella C:\Windows\System32\config\systemprofile\Desktop è vuota, mi aspettavo di trovare un file di log con l'attività eseguita.

    Che venga usata solo in caso di anomalie?

    non credo ...

    Ciao

    Gas


    Gastone Canali >http://www.armadillo.it

    Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE! Ricorda di dare un occhio anche QUI

    Saturday, November 17, 2012 5:59 PM