Il programma non funziona correttamente come attività pianificata


12

Situazione

Ho uno script batch che prepara alcuni file, esegue un programma ( .exe) e quindi elimina tali file.

Questa attività dovrebbe essere eseguita ogni ora, quindi sto provando a configurarla utilizzando Attività pianificate. Il problema è che il programma menzionato in precedenza non viene eseguito correttamente quando viene richiamato dall'attività (né tramite lo .batscript, né quando si chiama .exedirettamente), ma non viene visualizzato alcun messaggio di avviso o errore nei registri.

Impostare

L'attività è configurata per essere eseguita come account del servizio Windows con tutti i privilegi impostati correttamente. Quando utilizzo questo account per accedere tramite RDP, posso eseguire direttamente .bate .exesenza problemi, ma l'attività sembra non fare nulla. Questo è facilmente osservabile perché il programma sempre modifica un file, e la cambiata su timestamp non cambia attraverso il compito.

Nei registri delle attività pianificate ricevo i messaggi informativi per l'attività che avvia un processo, esce, ecc. Il "codice risultato", tuttavia, è 111(provato a Google questo senza fortuna, l'unica associazione che ottengo è "il nome del file è troppo lungo ", che è completamente irrilevante AFAIK). Nei registri delle applicazioni non ottengo assolutamente nulla.

Ciò di cui sospetto è il problema

Il programma è una vecchia mostruosità che genera una sorta di schermata iniziale (in realtà è una finestra normale), anche se la GUI non è necessaria perché non richiede interazione e si chiude dopo le operazioni. La finestra appare per circa 2 secondi.

Sospetto che questo requisito per una GUI abbia qualcosa a che fare con il fallimento dell'attività, ma non ne sono sicuro. Quando eseguo l'accesso con l'utente in cui viene eseguita l'attività (tramite RDP), non viene visualizzata alcuna finestra all'avvio dell'attività pianificata.


Modifica la GUI

Ho creato un eseguibile C # molto piccolo che avvia il programma senza la finestra principale (usando ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden). Anche in questo modo, l'attività pianificata non riesce ancora ad avviare correttamente il programma, ma il codice di ritorno è ora 0.


Aggiornare

Quando configuro l'attività per dire "Esegui se l'utente è connesso o meno" e l' run with highest privilegesopzione è deselezionata , il valore di errore è 2147943859.


Cosa posso fare per risolvere i problemi?

Sistema operativo = Windows Server 2008 R2 SP1

Se sono necessarie ulteriori informazioni, per favore fatemi sapere nei commenti.


Lo script e il "programma" accettano input, come opzioni o parametri? Hai provato a utilizzare PowerShell invece di batch? Quando si avvia un .exe"programma" con parametri all'interno di uno script, l'input deve essere correttamente fornito come argomento.
slybloty,

1
Hai provato lo scheduler con un altro programma? Basta sostituire un programma con uno diverso e vedere quali risultati si ottengono.
slybloty,

2
@ out-null Non credo che l'utilità di pianificazione utilizzi la finestra per sapere quando il programma ha terminato l'esecuzione, dovrebbe attendere il processo, qualunque cosa faccia con Windows. Ma se il programma tenta di cercare qualcosa di specifico per creare la sua schermata iniziale (diciamo la barra delle attività) e non riesce a trovarlo (perché viene eseguito su una stazione desktop / finestra separata), potrebbe essere che poi si arresti ...
Ale

1
OK. Hai provato a eseguirlo con l'account LocalSystem? Inoltre, hai provato a monitorare l'evento di avvio del processo con Process Monitor di Sysinternals?
Lucky Luke,

1
@BradBouchard Anche se la tua risposta potrebbe non risolvere la domanda dei PO in questo caso specifico, è una risposta valida e potrebbe essere utile per i futuri visitatori di San Francisco, e quindi ti incoraggio a non cancellarla.
Dico Reinstate Monica l'

Risposte:


6

Credo che il tuo problema abbia a che fare con le autorizzazioni dell'account utilizzato per eseguire l'attività o con il contesto dell'account esistente quando si tenta di eseguire l'attività.

Test per i requisiti di sessione della console

È possibile che il tuo .EXE deve essere eseguito in Consolesessione (aka Session 0) sul computer. Per verificare questo:

  1. Configurare l'attività su Esegui solo quando l'utente è connesso e specificare un orario di inizio dell'attività di 2 minuti in futuro
  2. Accedere alla macchina con lo stesso account utente utilizzato per eseguire l'attività (preferibilmente accedere alla sessione della console, trovandosi fisicamente nella console o utilizzando un programma di accesso remoto che dia accesso alla console. Per confermare che si sta utilizzando sessione della console, da un'esecuzione del prompt dei comandi QWINSTA, osservare la SESSIONNAMEcolonna e confermare l' >indicatore accanto console, in altre parole dovrebbe apparire come >console)
  3. Attendere l'esecuzione dell'attività

Se l'attività viene eseguita correttamente, provare a pianificare l'attività SCHTASKS.EXEutilizzando il /ITparametro In caso contrario, potresti non avere altra scelta che configurare il computer per accedere automaticamente come account utente del servizio ed eseguire l'attività come programma di avvio.

Controlla le autorizzazioni

Inoltre, come ho già suggerito, controlla quanto segue per confermare che l'account utilizzato per eseguire l'attività è correttamente autorizzato:

  1. Concedere all'account l' accesso come diritto utente di un processo batch (disponibile in Criteri di gruppo locali all'indirizzo Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments)
  2. Verificare che l'attività sia configurata su Esegui con i privilegi più elevati
  3. Verifica che l'utente disponga delle autorizzazioni NTFS complete per tutte le cartelle e i file con cui deve interagire. Non fare ipotesi; invece confermare navigando verso tali posizioni dei file e utilizzando la Effective Permissionsscheda in Proprietà / cartella del file all'indirizzoSecurity > Advanced

Altre cose da controllare / provare

  • L'attività richiede l'accesso per accedere alle risorse di rete? Cose come le unità mappate potrebbero essere presenti quando si accede con l'account utente, ma a seconda della configurazione del server potrebbe non essere presente nel contesto dell'account utente quando eseguito dall'Utilità di pianificazione.
  • Aggiungi un po 'di registrazione al tuo file batch. Dopo ogni riga che esegue, è necessario scrivere un po 'di output in un file di registro in modo da sapere dove si blocca. Per esempio:

    @echo off
    echo Line 1 >> "C:\MyLog.txt"
    "C:\My Folder\myOldProgram.exe"
    echo Line 2 >> "C:\MyLog.txt"
    DEL somefile.dat
    echo Line 3 >> "C:\MyLog.txt"
    
  • Prova ad eseguire il tuo .EXE con START, ad esempioSTART "myTitle" "C:\full\path\to\my.EXE"


2

Sto rispondendo a un vecchio post nel caso in cui aiuti qualcun altro. Ho avuto lo stesso problema. Il registro degli eventi diceva che il programma veniva completato normalmente, ma nemmeno la prima riga di codice avrebbe scritto nel registro per me. Finì per essere l'opzione "Avvia" nell'Utilità di pianificazione. Mi è venuto in mente che il programma funzionava bene dalla riga di comando quando ero nella directory corrente. Esistono file manifest e altre dipendenze nella stessa directory. Pertanto, se si dice che il processo pianificato si avvia nella stessa directory di EXE, si potrebbero ottenere risultati favorevoli. È stata la soluzione per me.


Questa era la soluzione per eseguire un'app console personalizzata sviluppata in Visual Studio con supporto dei file di configurazione.
billfredtom,

1

forse questo ti aiuta?

/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be

Abbiamo riscontrato un problema simile e la tua unica soluzione era quella di creare un account speciale sul server con accesso automatico. Quindi, se l'attività è stata eseguita con l'utente già connesso, il nostro .exe ha funzionato bene ...

so che questa non è una soluzione molto bella ma per noi è stata l'unica cosa che ha funzionato. non so se questo funziona per te ... (Ma con questo lavoro in giro devi controllare se l'utente è veramente loggato tutto il tempo ...)


L'attività non viene eseguita correttamente per me quando l'utente con cui viene eseguito è effettivamente connesso (tramite RDP). Uso l'account del servizio per accedere tramite RDP, avviare l'attività manualmente e non vedo apparire una finestra.
MarioDS,

2
Hai deselezionato l'opzione "Esegui con i privilegi più alti"? Penso che una volta selezionata questa opzione, accadrà un miglioramento dei diritti (UAC) e non vedrai una finestra anche quando l'utente ha effettuato l'accesso (verrà chiamato in una sessione separata senza finestra e fallirà). Prova anche a selezionare l'opzione "configurato per" -> "Windows Server 2003, Windows XP o Windows 2000".
frupfrup,

Ciò non sembra fare alcuna differenza, tranne quando ora imposto "Esegui se l'utente è connesso o meno" Ricevo il codice di errore 2147943859. Posso solo impostare "Configurato per" su Windows Vista/Windows Server 2008o Windows 7/Windows Server 2008 R2. Sembra non fare alcuna differenza.
MarioDS,

ok. un ultimo test: crea una nuova attività con "crea nuova attività" invece di "crea attività facile" (non so quale testo sia realmente mostrato - i miei server sono tedeschi - ma spero che tu sappia cosa intendo). penso che sia possibile selezionare "Windows Server 2003, ...". e poi riprova ancora con le altre opzioni ...
frupfrup

1

I ragazzi della compagnia che gestisce i server dei nostri clienti hanno affermato che un programma GUI non avrebbe funzionato in alcun modo tramite le attività programmate.

Usano un sistema di monitoraggio che ha anche funzionalità di pianificazione delle attività. L'hanno impostato e sembra funzionare.

Mi dispiace che non ho avuto la possibilità di valutare altri suggerimenti qui, ma grazie per aver cercato di aiutare comunque. Spero che possa aiutare gli altri in futuro, cosa che penso lo farà sicuramente.


1

Stavo tentando di avviare il vecchio programma VB6 utilizzando l'utilità di pianificazione su un server Windows 2008 R2. L'applicazione verrebbe eseguita dall'exe, tramite file batch o facendo clic su un collegamento, ma non verrebbe eseguita dall'utilità di pianificazione. Ho scoperto che quando i file di configurazione per l'applicazione, che erano memorizzati nella cartella delle applicazioni nella directory C: \ program files (x86), venivano copiati nella cartella dell'applicazione in c: \ programdata. lo scheduler ha funzionato. sembra che cmd.exe applichi la configurazione da una posizione diversa da quella utilizzata dall'utilità di pianificazione. Se l'applicazione ha file di configurazione, è possibile provare a spostarli nella cartella c: \ programdata \ application.


0

Stai facendo riferimento a qualsiasi unità di rete mappata nel tuo script o programma? Ho avuto un problema simile qualche tempo fa in cui il mio compito programmato non sarebbe stato eseguito e non riuscivo a capire perché. La modifica dei percorsi in percorsi UNC ha risolto il problema per me.

Cambia T:\Apps\MyProgram.exein\\MyServer\MyShare\Apps\MyProgram.exe


No, il programma si trova sul C:disco locale .
MarioDS,

0

Quando configuro l'attività per dire "Esegui se l'utente è connesso o meno" e l'opzione Esegui con privilegi più alti non è selezionata, il valore di errore è 2147943859.

2147943859 convertito in esadecimale è 800705b3 che un breve viaggio su Google mi dice che "Impossibile avviare il programma di installazione sul computer. Questa operazione richiede una stazione interattiva".

Ora, potrebbe esserci un modo per farlo funzionare in modo interattivo senza usare PSEXEC (da Sysinternals) ma poiché so già come farlo tramite PSEXEC è quello che userei.

PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Pertanto, modifica l'azione per anteporre tutto con psexec.exe -i (e -h se ne hai bisogno elevato) e dovrebbe funzionare.

Ho provato questo su Windows Server 2008 R2 SP1 con il seguente nella mia 'azione':

c:\windows\system32\cmd.exe

e quindi i parametri:

/c psexec.exe -h -i notepad.exe

Quando eseguo manualmente l'attività (poiché non ne ho la pianificazione) ottengo un blocco note elevato in esecuzione nella mia sessione corrente.


0

Forse la risposta a questa domanda aiuterà qualcun altro a leggere questa discussione?

/programming/32589381/

Riepilogo: le attività pianificate di Windows 2012 non visualizzano le variabili di ambiente corrette, incluso PATHl'account per il quale l'attività è impostata per essere eseguita.

Ho letto tutto questo molto tempo prima di elaborare quanto sopra. (Qual era il mio problema che portava allo stesso della domanda del PO.)

Una volta che (finalmente!) Lo sapete, è abbastanza facile testarlo (come da risposta stackoverflow), vederlo accadere e aggirarlo ....

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.