none
Server non esegue attività schedulate RRS feed

  • Domanda

  • Ho un server 2019 standard sul quale ho un problema, probabilmente banale.

    Su questo server devono girare dei programmi interni (eseguibili) che si trovano in una partizione specifica (d:\Programmi_interni\...). Se li lancio a mano, funzionano regolarmente.

    Se, invece, li schedulo, vedo il task che parte e resta in "running" a tempo indeterminato, e di fatto l'eseguibile non viene lanciato. Questo avviene sia indicando di eseguirlo solo ad accesso effettuato, sia indicando come utente "proprietario" lo stesso con cui eseguo il login al server (e con il quale riesco a lanciare a mano quegli stessi eseguibili).

    Inutile dire che l'utente in questione ha tutti i diritti sulle cartelle coinvolte (sia quelle dove risiedono i programmi, sia quelle toccate dall'elaborazione).

    Il problema si presenta sia lanciando i programmi in modalità sincrona (mettendo nella riga di comando direttamente l'eseguibile), sia asincrona (lanciando il programma CMD.exe con parametro /C seguito dal path completo del programma)

    mercoledì 12 maggio 2021 07:51

Risposte

  • Sky, permettimi, l "attaccarci virgole" e pippo.exe: io non posso sapere che tu cambi con nomi di fantasia l'eseguibile fra un post e l'altro, perdipiù fatico a capire il perchè, protezione della privacy del povero eseguibile? in realtà il nome dell'eseguibile è qualcosa di talmente sensibile, da non poter essere rivelato.. (ripeto mi sfugge ed è difficilmente intuibile). Infine, come al solito aggiungi variabili sconosciute a chi non è li con te, che depistano, un innominabile programma di 3parti (qual'è?)... che funziona! Cosa avrà in comune con l'altro exe? sarà totalmente differente?

    Mi farebbe piacere  sapere come l'exe fa a capire  che deve copiare da un'unità mappata ad un'altra, dove prende questo dato?? via gui? via ini? grazie.

    Torniamo al problema, ora sappiamo che copia qualcosa in rete (non ha caso dicevo ... "soprattutto se copia qualcosa in rete"), ora è chiaro uno dei possibili problemi (l'unico, ne sono certo, imho).

    Le unità mappate dall'utente non sono "accessibili" ("in not interactive task" taglio corto e non spiego il perchè) nelle sessione di un task schedulato!!

    Perchè il task funzioni correttamente devi mappare le unità all'interno della sessione temporizzata.

    Ecco come fare:

    @echo off
    :: taskcopiafile.cmd
    :: :: creo la dir c:\temp (sperando che l'utente lo possa fare) mkdir c:\temp >>c:\temp\log_task.log 2>&1

    :: echo ---- 'Avvio task il %date% alle %time% ---- >>c:\temp\log_task.log


    :: 'mappo la share sorgente
    echo Mappo la destinazione >>c:\temp\log_task.log
    net use S: \\server\shareSorgente >>c:\temp\log_task.log 2>&1

    :: mappo la destinazione
    net use T: \\server\shareDesTination >>c:\temp\log_task.log 2>&1

    :: Verifico le mappature, se esistenti
    net use >>c:\temp\log_task.log 2>&1
    :: Se nel log non le vedi, continuamo con i post (problema di utente e pwd o di autenticazione implicita...)

    :: Se SpostaFile.exe è una console application :: verrà esguita in modalità sincrona all'interno del batch :: semplicemente lanciandola come segue :: D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe :: Se si tratta di una windows application (quindi asincrona) dovrà essere eseguita :: sfruttando il comando START con l'opzione /WAIT :: propendo per la win application' :: quindi la rendo sincrona START "sposta" /WAIT D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe

    :: oppure eseguilo normalmente, eseguibile "secco"
    :: limitiamo le tue possibilità di errore :)
    :: percorso completo tra virgolette se ha degli spazi :: ES.: "D:\Programmi_Interni\SpostaFile_ZIP\NomeDelTuoEseguibile.exe"

    echo ---- Fine Task il %date% alle %time% ---- >>c:\temp\log_task.log


    Ciao gastone.

    PS. Se provi ad eseguire via linea di comando il tuo exe "dandogli in qualche modo" sorgente e destinazione inesistenti (es: A: e  B:) dovresti vedere l'errore o ritrovarlo negli eventi, quella è l'eccezione non gestita da chi ha fatto il programma... e avrai simultato la mancanza di mappatura delle share di rete. Sono Curioso di sapere di tale prova.
    Di solito ho un solo utente per tutti i task schedulati (in alcuni casi anche 2, con permessi diversi), con password che non scade mai..,


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here






    sabato 22 maggio 2021 13:38
    Moderatore
  • Perdonami Gastone, ma proprio non vedo come possa essere dirimente il nome di un eseguibile  dal momento che non contiene strani caratteri o simboli. Non posso scrivere il nome vero semplicemente perché contiene il nome del cliente per il quale è stato creato (non è la CIA o l'NSA, ma è comunque questione di privacy).

    Il problema del nome è relativo, l'importante è che quando dai delle informazioni, siano coerenti!! Se tu l'avessi chiamato sempre nello stesso modo non avresti creato confusione (e non mi avresti solleticato l'idea di sapere il nome esatto... magari si sarebbe potuto  chiamare "mario draghi  via monti 2 il mio pnrr.exe" e gli spazi, dato il nome, sarebbero stati significativi in fase di schedulazione.

    Alla luce delle nuove info, potresti modificare il file xml sostituendo il percorso UNC (i file xml, di solito, sono leggibili e intuibili nel contenuto se fatti come si deve), qualora non funzionasse ancora, potrebbe essere che se eseguito come elevato la "working directory" diventa c:\windows\system32 e dato che l'eseguibile è stato programmato senza gestire le possibili eccezioni e non è resiliente al contesto di esecuzione, dovresti forzare la working dir  che trovi in task->Azioni->modifica->Inizio (facoltativo):   

    Se non vuoi modificare nulla rimane, rimane valida l'opzione batch, aggiungerei la riga pushd (vedi sotto) anche se non significativa (non si sa mai...)

    :: echo ---- 'Avvio task il %date% alle %time% ---- >>c:\temp\log_task.log

    :: forzo la working dir
    :: trucco per spostarmi nella dir dell'eseguibile pushd full path dell'eseguibile con aggiunto in coda \..

    pushd "D:\Programmi_Interni\CopiaFile_TXT\CopiaFile.exe"\..

    :: 'mappo la share sorgente echo Mappo la destinazione >>c:\temp\log_task.log net use S: \\server\shareSorgente >>c:\temp\log_task.log 2>&1 :: mappo la destinazione net use T: \\server\shareDesTination >>c:\temp\log_task.log 2>&1 :: Verifico le mappature, se esistenti net use >>c:\temp\log_task.log 2>&1 :: Se nel log non le vedi, continuiamo con i post (problema di utente e pwd o di autenticazione implicita...)


    Come scritto nelle note precedenti, farei la prova con le mappature assenti per vedere l'errore dot net, poi al programmatore potrai spiegare qualcosa sulle problematiche emerse, d chissà la prossima versione del sw sarà più robusta.

      ciao Gastone


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here


    mercoledì 26 maggio 2021 10:55
    Moderatore

Tutte le risposte

  • Puoi postare la linea di comando che usi nel task schedulato?

    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here

    mercoledì 12 maggio 2021 12:05
    Moderatore
  • Posto gli XML di entrambe le versioni:

    Esegue CMD:

    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2021-05-11T17:14:55.7665104</Date>
        <Author>DOMINIO\Administrator</Author>
        <URI>\Programmi_Interni\CopiaFile_ZIP</URI>
      </RegistrationInfo>
      <Triggers>
        <CalendarTrigger>
          <StartBoundary>2021-05-11T09:00:00</StartBoundary>
          <Enabled>true</Enabled>
          <ScheduleByDay>
            <DaysInterval>1</DaysInterval>
          </ScheduleByDay>
        </CalendarTrigger>
      </Triggers>
      <Principals>
        <Principal id="Author">
          <UserId>S-1-5-21-2829648378-2966955502-1721341146-500</UserId>
          <LogonType>Password</LogonType>
          <RunLevel>LeastPrivilege</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
        <AllowHardTerminate>true</AllowHardTerminate>
        <StartWhenAvailable>false</StartWhenAvailable>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <IdleSettings>
          <StopOnIdleEnd>true</StopOnIdleEnd>
          <RestartOnIdle>false</RestartOnIdle>
        </IdleSettings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <Enabled>true</Enabled>
        <Hidden>false</Hidden>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <WakeToRun>false</WakeToRun>
        <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
        <Priority>7</Priority>
      </Settings>
      <Actions Context="Author">
        <Exec>
          <Command>C:\Windows\System32\cmd.exe</Command>
          <Arguments>/c D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe</Arguments>
        </Exec>
      </Actions>
    </Task>

    Esegue direttamente programma:

    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2021-05-11T17:14:55.7665104</Date>
        <Author>DOMINIO\Administrator</Author>
        <URI>\Programmi_Interni\CopiaFile_ZIP</URI>
      </RegistrationInfo>
      <Triggers>
        <CalendarTrigger>
          <StartBoundary>2021-05-11T09:00:00</StartBoundary>
          <Enabled>true</Enabled>
          <ScheduleByDay>
            <DaysInterval>1</DaysInterval>
          </ScheduleByDay>
        </CalendarTrigger>
      </Triggers>
      <Principals>
        <Principal id="Author">
          <UserId>S-1-5-21-2829648378-2966955502-1721341146-500</UserId>
          <LogonType>Password</LogonType>
          <RunLevel>LeastPrivilege</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
        <AllowHardTerminate>true</AllowHardTerminate>
        <StartWhenAvailable>false</StartWhenAvailable>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <IdleSettings>
          <StopOnIdleEnd>true</StopOnIdleEnd>
          <RestartOnIdle>false</RestartOnIdle>
        </IdleSettings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <Enabled>true</Enabled>
        <Hidden>false</Hidden>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <WakeToRun>false</WakeToRun>
        <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
        <Priority>7</Priority>
      </Settings>
      <Actions Context="Author">
        <Exec>
          <Command>D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe</Command>
        </Exec>
      </Actions>
    </Task>

    L'utente con cui ho schedulato questa operazione è lo stesso che riesce a lanciarla a mano tranquillamente e, ovviamente, ho pieni diritti sulla cartella in cui risiede il programma

    giovedì 13 maggio 2021 10:20
  • HI Skywalker Senior
     
    When issue happen again, is there any logs about your issue?
    eventviwer\
    system
    application

    Please right click below event item and enable below logs.
    eventviewer\applications and service logs\microsoft\windows\taskscheduler\
    debug
    diagnostic
    maintenance
    operational

    -----------------------------------------------
    Quando il problema si ripresenta, ci sono registri sul tuo problema?
    eventviwer \
    sistema
    applicazione

    Fare clic con il pulsante destro del mouse sotto l'elemento dell'evento e abilitare i registri sottostanti.
    eventviewer \ applicazioni e registri di servizio \ microsoft \ windows \ taskscheduler \
    debug
    diagnostico
    Manutenzione
    operativo


    Best Regards
    Andy YOU
    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    giovedì 13 maggio 2021 10:36
  • Allora, non è un problema di schedulazione, perché ho visto che l'event viewer mi segnala che il task termina correttamente (anche se in realtà resta in "running" finché non lo fermo). Ciò che non termina è il programma stesso, che in Event viewer mi segnala un errore di .Net Runtime. Mi chiedo come mai, invece, funzioni regolarmente se lo lancio a mano
    giovedì 13 maggio 2021 18:33
  • Ti avevo chiesto la linea di comando, perchè parlavi di programma, poi di programmi eseguiti, di modalitè sincrona e asincrona (anche se in realtà sei in asincrona  in entrambi i casi... il cmd /c non modifica le cose, forse intendevi altro).

    Il problema del task che rimane in "esecuzione/running" è un bug che affligge il task scheduler da molte versioni di windows (sicuramente da win 2008 a oggi), al fine di verifcare se il task è terminato devi usare F5 (refresh) o chiudere e riaprire la management console, oppure con il task manager vedere se l'applicativo schedulato è presente.

    Detto ciò, di solito per temporizzare degli applicativi uso un batch che mi serve come debug e analisi della durarata di esecuzione.

    @echo off
    :: taskcopiafile.cmd
    :: :: creo la dir c:\temp (sperando che l'utente lo possa fare) mkdir c:\temp 1>NUL 2>NUL :: echo ---- Avvio task il %date% alle %time% ---- >>c:\temp\log_task.log :: Se SpostaFile.exe è una console application :: verrà esguita in modalità sincrona all'interno del batch :: semplicemente lanciandola come segue :: D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe :: Se si tratta di una windows application (quindi asincrona) dovrà essere eseguita :: sfruttando il comando START con l'opzione /WAIT :: propendo per la win application' :: quindi la rendo sincrona START "sposta" /WAIT D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe echo ---- Fine Task il %date% alle %time% ---- >>c:\temp\log_task.log

    Eseguirei il tuo programma sfruttando il batch sopra, verificando poi  c:\temp\log_task.log:

    • se non creato, il task non viene eseguito (rifare il task, usare un'altro utente con Batch Job Rightse riprovare)
    • se compare solo  ---- Avvio task ....   il programma partito ed è in funzione
    • se non compare mai ---- Fine task ... dopo un tempo ragionevole (qui lo sai tu) il programma è "appeso"
    • se compare ---- Fine task ...  Processo finito, eseguite tutte le istruzioni fra Avvio e Fine

    "Ciò che non termina è il programma stesso" Come fai  a capirlo ? lo vedi nel task manager?

    Come fai a mettere in relazione "che in Event viewer mi segnala un errore di .Net Runtime" con il task? quale errore?

    "Mi chiedo come mai, invece, funzioni regolarmente se lo lancio a mano" dipende da come stata fatta l'applicazione, se ciò che riporti è vero l'app è stata fatta male....

    Son curioso di capire SpostaFile.exe cosa faccia, dal nome sembra che abbiano scomodato un programmatore per un task fattibile da uno script...


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here





    giovedì 13 maggio 2021 21:24
    Moderatore
  • HI Skywalker Senior,

    "che in Event viewer mi segnala un errore di .Net Runtime. Mi chiedo come mai, invece, funzioni regolarmente se lo lancio a mano"

    1.Se c'è un problema .net, possiamo provare a eseguire lo strumento di riparazione di Microsoft .NET Framework per verificarlo.

    È disponibile lo strumento di riparazione di Microsoft .NET Framework
    https://support.microsoft.com/en-us/topic/microsoft-net-framework-repair-tool-is-available-942a01e3-5b8b-7abb-c166-c34a2f4b612a

    2.Il tuo CMD ha funzionato bene prima sul tuo problematico server w2019?

    Best Regards
    Andy YOU
    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    martedì 18 maggio 2021 01:16
  • "che in Event viewer mi segnala un errore di .Net Runtime. Mi chiedo come mai, invece, funzioni regolarmente se lo lancio a mano"

    Puoi riportare l'errore e dopo potremo valutare le azioni da intraprendere, cominciare con le  "riparazioni" perchè un programma non funziona in modalità schedulata... secondo me è un po' eccessivo, sai le applicazioni .NET possono aver contestii di sicurezza differenziati.


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here

    martedì 18 maggio 2021 21:02
    Moderatore
  • Gli eventi .Net che trovo sono due. Un 1026 seguito da un 1000

    1026:

    Application: CopiaFile.exe
    Framework Version: v4.0.30319
    Description: The process was terminated due to an unhandled exception.
    Exception Info: System.IO.DirectoryNotFoundException
       at System.IO.__Error.WinIOError(Int32, System.String)
       at System.IO.FileStream.Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)
       at System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean, Boolean, Boolean)
       at System.IO.StreamWriter.CreateFile(System.String, Boolean, Boolean)
       at System.IO.StreamWriter..ctor(System.String, Boolean, System.Text.Encoding, Int32, Boolean)
       at System.IO.File.InternalWriteAllText(System.String, System.String, System.Text.Encoding, Boolean)
       at CopiaTabelleStatiche.Program.Main(System.String[])

    1000:

    Faulting application name: CopiaFile.exe, version: 1.0.0.0, time stamp: 0x60978e8e
    Faulting module name: KERNELBASE.dll, version: 10.0.17763.1728, time stamp: 0xc97af40a
    Exception code: 0xe0434352
    Fault offset: 0x0000000000039689
    Faulting process id: 0x193c
    Faulting application start time: 0x01d74d594f7ad726
    Faulting application path: D:\Programmi_Interni\CopiaFile_TXT\CopiaFile.exe
    Faulting module path: C:\Windows\System32\KERNELBASE.dll
    Report Id: c26adc60-d2d0-43a9-91de-ab41b4f6f7ae
    Faulting package full name: 
    Faulting package-relative application ID: 

    Inutile dire che questi errori non vengono fuori se lancio l'applicativo con un banale doppio click sull'eseguibile, con lo stesso medesimo utente che schedula il task

    giovedì 20 maggio 2021 09:28
  • A questo punto è fondamentale (prima era una curiosità) sapere cosa fa questo eseguibile (soprattutto se copia qualcosa in rete).

    Description: The process was terminated due to an unhandled exception.
    Ha tutta l'aria di essere un problema di programmazione, non hanno gestito un'eccezione,  sicuramente non è un problema del donet framework, ma di come è stata programmata l'applicazione.

    Leggo e rileggo con attenzione le domande  sul  forum, perchè spesso sono confuse e carenti di dati significativi (permettimi, anche le tue, non fanno eccezione... ).

    Tornando a questi tuoi post, non ho fatto a meno di notare che il task schedulato è :
    D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe
    mentre
    quello dell'errore associato che hai postato è
    D:\Programmi_Interni\CopiaFile_TXT\CopiaFile.exe

    Quindi SpostaFile.exe, magari viene eseguito  e termina correttamente però non copia  quando è schedulato (problema di come è stato fatto), magari non viene eseguito e non copia... insomma siamo tornati all'inizio... anzi peggio c'è un problema nuovo, CopiaFile.exe che da errore!

    Questo fa capire, perchè chiedo informazioni su affermazioni e metto in dubbio anche le deduzioni fornite...

    Es:.
    Come fai a mettere in relazione "che in Event viewer mi segnala un errore di .Net Runtime" con il task?
    quale errore?

    Inutile dire necessitiamo di dati significativi, verificati, altrimenti, un problema, probabilmente banale, viene depistato dai tuoi post.

    Ciao Gastone


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here




    giovedì 20 maggio 2021 20:16
    Moderatore
  • A questo punto ti chiedo di usare il batch che ho consigliato precedentemente, per schedulare spostafile.exe e postarci il log, spiegare molto bene cosa fa questo eseguibile, verificare l'event viewer se esistono errori associati all'app o al task e riportarli (e sapere chi ha sviluppato il programma :)


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here

    giovedì 20 maggio 2021 20:23
    Moderatore
  • Ok, ricominciamo da capo, possibilmente senza attaccarci alle virgole (il nome "CopiaFile" piuttosto che "SpostaFile" non ha alcun significato particolare. Potevo scrivere "pippo.exe").

    L'eseguibile in questione risiede nel disco D: del server sul quale viene eseguito. Prende dei file da una cartella di rete (mappata), li rinomina aggiungendo un timestamp e li COPIA (non chiedetemi quali funzioni usi, perché non l'ho fatto io) in un'altra cartella di rete (anch'essa mappata). Tutti gli utenti coinvolti nella schedulazione di tale job vedono le suddette mappature e, ovviamente, hanno tutti i permessi necessari.

    Ho anche provato a rischedulare il tutto usando l'amministratore locale del server invece di quello di dominio: stesso problema. Metto in relazione l'errore .Net con la schedulazione perché l'errore viene fuori solo quando avvio quella schedulazione (anche a mano), mentre non viene fuori quando lancio direttamente a mano l'eseguibile.

    Alla fine, usando un programma di terze parti, ho fatto la stessa medesima cosa, e funziona tutto, quindi comincio a pensare che il problema sia lo schedulatore integrato

    sabato 22 maggio 2021 09:45
  • Sky, permettimi, l "attaccarci virgole" e pippo.exe: io non posso sapere che tu cambi con nomi di fantasia l'eseguibile fra un post e l'altro, perdipiù fatico a capire il perchè, protezione della privacy del povero eseguibile? in realtà il nome dell'eseguibile è qualcosa di talmente sensibile, da non poter essere rivelato.. (ripeto mi sfugge ed è difficilmente intuibile). Infine, come al solito aggiungi variabili sconosciute a chi non è li con te, che depistano, un innominabile programma di 3parti (qual'è?)... che funziona! Cosa avrà in comune con l'altro exe? sarà totalmente differente?

    Mi farebbe piacere  sapere come l'exe fa a capire  che deve copiare da un'unità mappata ad un'altra, dove prende questo dato?? via gui? via ini? grazie.

    Torniamo al problema, ora sappiamo che copia qualcosa in rete (non ha caso dicevo ... "soprattutto se copia qualcosa in rete"), ora è chiaro uno dei possibili problemi (l'unico, ne sono certo, imho).

    Le unità mappate dall'utente non sono "accessibili" ("in not interactive task" taglio corto e non spiego il perchè) nelle sessione di un task schedulato!!

    Perchè il task funzioni correttamente devi mappare le unità all'interno della sessione temporizzata.

    Ecco come fare:

    @echo off
    :: taskcopiafile.cmd
    :: :: creo la dir c:\temp (sperando che l'utente lo possa fare) mkdir c:\temp >>c:\temp\log_task.log 2>&1

    :: echo ---- 'Avvio task il %date% alle %time% ---- >>c:\temp\log_task.log


    :: 'mappo la share sorgente
    echo Mappo la destinazione >>c:\temp\log_task.log
    net use S: \\server\shareSorgente >>c:\temp\log_task.log 2>&1

    :: mappo la destinazione
    net use T: \\server\shareDesTination >>c:\temp\log_task.log 2>&1

    :: Verifico le mappature, se esistenti
    net use >>c:\temp\log_task.log 2>&1
    :: Se nel log non le vedi, continuamo con i post (problema di utente e pwd o di autenticazione implicita...)

    :: Se SpostaFile.exe è una console application :: verrà esguita in modalità sincrona all'interno del batch :: semplicemente lanciandola come segue :: D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe :: Se si tratta di una windows application (quindi asincrona) dovrà essere eseguita :: sfruttando il comando START con l'opzione /WAIT :: propendo per la win application' :: quindi la rendo sincrona START "sposta" /WAIT D:\Programmi_Interni\SpostaFile_ZIP\SpostaFile.exe

    :: oppure eseguilo normalmente, eseguibile "secco"
    :: limitiamo le tue possibilità di errore :)
    :: percorso completo tra virgolette se ha degli spazi :: ES.: "D:\Programmi_Interni\SpostaFile_ZIP\NomeDelTuoEseguibile.exe"

    echo ---- Fine Task il %date% alle %time% ---- >>c:\temp\log_task.log


    Ciao gastone.

    PS. Se provi ad eseguire via linea di comando il tuo exe "dandogli in qualche modo" sorgente e destinazione inesistenti (es: A: e  B:) dovresti vedere l'errore o ritrovarlo negli eventi, quella è l'eccezione non gestita da chi ha fatto il programma... e avrai simultato la mancanza di mappatura delle share di rete. Sono Curioso di sapere di tale prova.
    Di solito ho un solo utente per tutti i task schedulati (in alcuni casi anche 2, con permessi diversi), con password che non scade mai..,


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here






    sabato 22 maggio 2021 13:38
    Moderatore
  • HI Skywalker Senior,

    “Inutile dire che questi errori non vengono fuori se lancio l'applicativo con un banale doppio click sull'eseguibile, con lo stesso medesimo utente che schedula il task”

    “Alla fine, usando un programma di terze parti, ho fatto la stessa medesima cosa, e funziona tutto, quindi comincio a pensare che il problema sia lo schedulatore integrato”


    Quando il problema si ripresenta, ci sono registri sul tuo problema?
    eventviwer \
    sistema
    applicazione

    Fare clic con il pulsante destro del mouse sotto l'elemento dell'evento e abilitare i registri sottostanti.
    eventviewer \ applicazioni e registri di servizio \ microsoft \ windows \ taskscheduler \
    debug
    diagnostico
    Manutenzione
    operativo

    Puoi controllare se ci sono di seguito o altri registri correlati.
    L'ID evento 100 indica che è stata avviata un'attività pianificata
    L'ID evento 101 indica che un'applicazione non è riuscita a avviarsi.
    Un ID evento 102 viene normalmente registrato quando un'attività viene completata correttamente,
    Quando un'attività viene avviata ma l'azione configurata per l'attività non viene eseguita, normalmente viene registrato un ID evento 103 o un ID evento 203.

    servizio di pianificazione delle attività -> motore delle attività -> trigger -> azione -> la tua app

    Best Regards
    Andy YOU
    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    lunedì 24 maggio 2021 09:41
  • Perdonami Gastone, ma proprio non vedo come possa essere dirimente il nome di un eseguibile  dal momento che non contiene strani caratteri o simboli. Non posso scrivere il nome vero semplicemente perché contiene il nome del cliente per il quale è stato creato (non è la CIA o l'NSA, ma è comunque questione di privacy).

    I percorsi di origine e destinazione della copia sono scritti in un file XML che risiede nello stesso percorso dell'eseguibile. Posso presumere (ma dovrò chiedere al programmatore) che l'eseguibile faccia riferimento a questo XML in modo da poterlo raggiungere a prescindere da fatto che venga lanciato a mano direttamente da dentro la sua cartella, piuttosto che passando da un UNC, o schedulato in qualche modo. So per certo che il tutto funziona usando come schedulatore un programma di terze parti (Febooti).

    É interessante la questione della mappatura, e proverò ad applicare il batch che mi hai suggerito.

    mercoledì 26 maggio 2021 08:53
  • Perdonami Gastone, ma proprio non vedo come possa essere dirimente il nome di un eseguibile  dal momento che non contiene strani caratteri o simboli. Non posso scrivere il nome vero semplicemente perché contiene il nome del cliente per il quale è stato creato (non è la CIA o l'NSA, ma è comunque questione di privacy).

    Il problema del nome è relativo, l'importante è che quando dai delle informazioni, siano coerenti!! Se tu l'avessi chiamato sempre nello stesso modo non avresti creato confusione (e non mi avresti solleticato l'idea di sapere il nome esatto... magari si sarebbe potuto  chiamare "mario draghi  via monti 2 il mio pnrr.exe" e gli spazi, dato il nome, sarebbero stati significativi in fase di schedulazione.

    Alla luce delle nuove info, potresti modificare il file xml sostituendo il percorso UNC (i file xml, di solito, sono leggibili e intuibili nel contenuto se fatti come si deve), qualora non funzionasse ancora, potrebbe essere che se eseguito come elevato la "working directory" diventa c:\windows\system32 e dato che l'eseguibile è stato programmato senza gestire le possibili eccezioni e non è resiliente al contesto di esecuzione, dovresti forzare la working dir  che trovi in task->Azioni->modifica->Inizio (facoltativo):   

    Se non vuoi modificare nulla rimane, rimane valida l'opzione batch, aggiungerei la riga pushd (vedi sotto) anche se non significativa (non si sa mai...)

    :: echo ---- 'Avvio task il %date% alle %time% ---- >>c:\temp\log_task.log

    :: forzo la working dir
    :: trucco per spostarmi nella dir dell'eseguibile pushd full path dell'eseguibile con aggiunto in coda \..

    pushd "D:\Programmi_Interni\CopiaFile_TXT\CopiaFile.exe"\..

    :: 'mappo la share sorgente echo Mappo la destinazione >>c:\temp\log_task.log net use S: \\server\shareSorgente >>c:\temp\log_task.log 2>&1 :: mappo la destinazione net use T: \\server\shareDesTination >>c:\temp\log_task.log 2>&1 :: Verifico le mappature, se esistenti net use >>c:\temp\log_task.log 2>&1 :: Se nel log non le vedi, continuiamo con i post (problema di utente e pwd o di autenticazione implicita...)


    Come scritto nelle note precedenti, farei la prova con le mappature assenti per vedere l'errore dot net, poi al programmatore potrai spiegare qualcosa sulle problematiche emerse, d chissà la prossima versione del sw sarà più robusta.

      ciao Gastone


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here


    mercoledì 26 maggio 2021 10:55
    Moderatore
  • Allora, forse siamo arrivati al nocciolo del problema. Connettendo le unità a mano con il batch prima di lanciare l'eseguibile, sembra che finalmente funzioni tutto.

    Mi resta inspiegabile il perché, se l'utente col quale schedulo il task, ha già le unità mappate, queste non vengono viste se non rimappandole subito prima via script.

    L'unica "risposta" che mi sono dato è che, visto che la mappatura viene fatta dopo il login, al momento della schedulazione risulta non ancora attiva (ma sono straconvinto che fino a qualche tempo fa non era così)

    venerdì 28 maggio 2021 07:48
  • Allora, forse siamo arrivati al nocciolo del problema. Connettendo le unità a mano con il batch prima di lanciare l'eseguibile, sembra che finalmente funzioni tutto.

    Mi resta inspiegabile il perché, se l'utente col quale schedulo il task, ha già le unità mappate, queste non vengono viste se non rimappandole subito prima via script.

    L'unica "risposta" che mi sono dato è che, visto che la mappatura viene fatta dopo il login, al momento della schedulazione risulta non ancora attiva (ma sono straconvinto che fino a qualche tempo fa non era così)

    La "risposta" che ti dai non è corretta,anche se verosimile, spesso nel forum troviamo delle risposte che possono sembrare spiegare il problema, poi la realtà è un'altra.


    Dicevo:

    "Le unità mappate dall'utente non sono "accessibili" ("in not interactive task" taglio corto e non spiego il perchè) nelle sessione di un task schedulato!!
    Perchè il task funzioni correttamente devi mappare le unità all'interno della sessione temporizzata."

    Se ti vuoi dare una rispostta sul  perchè nelle sessione di un task schedulato, non siano visibili le mappature già presenti, nei link di seguito trovi le risposte, sarebbe stato troppo lungo parlare di sessione 0, task isolation e interactive task.  Una volta (fino a windows 2003 e xp) non era così come oggi, poi fu introdotta la session 0 (da windows 2008 e vista in poi)

    problema con esecuzione comando schedulato

    Impact of Session 0 Isolation on Services and Drivers in Windows

    Application Compatibility - Session 0 Isolation

    What is Microsoft Windows Session 0 Isolation and Interactive Services Detection?


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here










    lunedì 31 maggio 2021 07:05
    Moderatore
  • Grazie per la precisazione. Ne terrò conto in futuro
    mercoledì 2 giugno 2021 16:27