Newsgroup: it.comp.os.win.windows10
Titolo: Avviare Servizio di stampa manualmente

Se disabilito il servizio di stampa, perchè stampo una volta ogni tre 
mesi, e quindi è disabilitato sempre, posso avviarlo con un .bat o devo 
per forza passare dai servizi?
 
Ad esempio stavo provando il comando
net start spooler
 
ma mi dice Errore di sistema 1058.
"Impossibile avviare il servizio. Il servizio è disabilitato oppure non 
è associato ad alcun dispositivo attivo."
 



Invece di disabilitarlo, mettilo in "manuale", in quel modo potrai
avviarlo usando "net start" o "sc start"
 


ah ecco manuale, forse era lì che sbagliavo.

 ah ecco manuale, forse era lì che sbagliavo.
 
Se è disabilitato, significa che no puoi fargli nulla, se lo metti in
manuale, invece, significa che non partirà in automatico (appunto) ma
che potrà essere avviato a richiesta, ad esempio con uno "start", qui
sotto un semplice file batch che permette di avviare un servizio nel
caso in cui questo non sia già stato avviato
 
@echo off
:
:INIT
rem --- inizializza
setlocal
pushd %~dp0
:
:ARGS
rem --- imposta nome servizio, default o passato come argomento
set SVCNAME=nome_del_servizio
if (%1)==() goto CHECK
set SVCNAME=%1
:
:CHECK
rem --- verifica se il servizio è già in esecuzione
tasklist /nh /fi "SERVICES eq %SVCNAME%" /svc|find /i "%SVCNAME%" >NUL
if errorlevel 1 goto STARTSVC
goto STARTED
:
:STARTSVC
rem --- servizio non in esecuzione, lo avvia
echo Avvio %SVCNAME%
sc start %SVCNAME%
timeout /T 10 >NUL 2>&1
goto QUIT
:
:STARTED
rem --- il servizio è già in esecuzione
echo %SVCNAME% è in esecuzione
:
:QUIT
rem --- fine
 
 
 


non ci capisco molto, però ho immaginato di dover sostituire il 
"nome_del_servizio" con spooler (nel mio caso)
 
e sembra funzionare, questo è quello che vedo nel prompt
 
NOME_SERVIZIO: spooler
         TIPO                   : 110  WIN32_OWN_PROCESS  (interactive)
         STATO                  : 2  START_PENDING
                                 (NOT_STOPPABLE, NOT_PAUSABLE, 
IGNORES_SHUTDOWN)
         CODICE_USCITA_WIN32    : 0  (0x0)
         CODICE_USCITA_SERVIZIO : 0  (0x0)
         PUNTO_CONTROLLO          : 0x0
         INDICAZIONE_ATTESA     : 0x7d0
         PID                    : 16076
         FLAG                   :
 
visto che funziona il *grazie* vien da sé
 
pensavo... si potrebbe in caso aggiungere un comando che se è in 
esecuzione lo fa invece stoppare, sempre "non ci capisco niente", ma 
ipotizzo che nell'ultima parte, se il servizio è già in esecuzione, 
basterebbe fare uno sc stop %SVCNAME% giusto?
 
 
 

 basterebbe fare uno sc stop %SVCNAME% giusto?
 
vedi sotto; per il resto, il nome del servizio lo puoi impostare nello
script (SVCNAME) oppure lo puoi passare come argomento, ad esempio se
il batch si chiama "servizio.cmd", basterà lanciarlo con
 
servizio.cmd spooler
 
per far partire o arrestare il servizio spooler
 
ciao
 
 
 
 
@echo off
:
:INIT
rem --- inizializza
setlocal
pushd %~dp0
:
:ARGS
rem --- imposta nome servizio, default o passato come argomento
set SVCNAME=nome_del_servizio
if (%1)==() goto CHECK
set SVCNAME=%1
:
:CHECK
rem --- verifica se il servizio è già in esecuzione
tasklist /nh /fi "SERVICES eq %SVCNAME%" /svc|find /i "%SVCNAME%" >NUL
if errorlevel 1 goto STARTSVC
goto STOPSVC
:
:STARTSVC
rem --- servizio non in esecuzione, lo avvia
echo Avvio %SVCNAME%
sc start %SVCNAME%
timeout /T 10 >NUL 2>&1
goto QUIT
:
:STOPSVC
rem --- il servizio è già in esecuzione
echo Arresto %SVCNAME%
sc stop %SVCNAME%
timeout /T 10 >NUL 2>&1
goto QUIT
:
:QUIT
rem --- fine
 
 

 :INIT
 
versione corretta, c'era una svista; ovviamente il batch va lanciato
con privilegi di amministratore, altrimenti l'avvio e l'arresto del
servizio non funzionerà
 
 
@echo off
:
:INIT
rem --- inizializza
setlocal
pushd %~dp0
:
:ARGS
rem --- imposta nome servizio, default o passato come argomento
set SVCNAME=nome_del_servizio
if (%1)==() goto CHECK
set SVCNAME=%1
:
:CHECK
rem --- verifica se il servizio è in esecuzione
tasklist /nh /fi "SERVICES eq %SVCNAME%" /svc|find /i "%SVCNAME%" >NUL
if errorlevel 1 goto STARTSVC
goto STOPSVC
:
:STARTSVC
rem --- servizio non in esecuzione, lo avvia
echo Avvio %SVCNAME%
sc start %SVCNAME%
timeout /T 10 >NUL 2>&1
goto QUIT
:
:STOPSVC
rem --- servizio in esecuzione, lo arresta
echo Arresto %SVCNAME%
sc stop %SVCNAME%
timeout /T 10 >NUL 2>&1
goto QUIT
:
:QUIT
rem --- fine
popd
 
 

 servizio non funzionerà
 
ok, grazie, comunque funzionava anche quello di prima ;)
 

 ok, grazie, comunque funzionava anche quello di prima ;)
 
si, solo che mancava il "popd" al termine, niente di che ma mi piace
che il codice sia pulito
 

 che il codice sia pulito
 
e già che ci siamo, visto che ho fatto 30, facciamo anche 31 
 
la modifica sotto esegue anche il controllo dei diritti "admin", se
lanciato senza tali diritti, visualizza un messaggio e termina senza
fare nulla
 
:-D
 
 
 
@echo off
:
:INIT
rem --- inizializza
setlocal
pushd %~dp0
:
:CHECKADM
whoami /groups|find "S-1-16-12288" >NUL 2>&1
if errorlevel 1 goto NOADMIN
goto ARGS
:
:NOADMIN
echo Attenzione, questo script per funzionare necessita dei diritti
echo di amministratore, rilanciare lo script come amministratore per
echo permettergli di funzionare correttamente.
pause
goto QUIT



popd sarebbe?
qualcosa che dovrebbe apparire?

qualcosa che dovrebbe apparire?
 
pushd ti ha portato in una directory per eseguire lo script
popd ti riporta a quella di partenza
 
-- 
Ci sono 10 tipi di persone al mondo: quelle che capiscono il sistema binario
e quelle che non lo capiscono.

 popd ti riporta a quella di partenza
 
ed il bello è che funziona anche con le share di rete, esempio
 
pushd \\server\share
...fai qualcosa...
popd
 
:D
 

 
 
vabbè ma in caso inutile visto che la finestra si chiude, no?

vabbè ma in caso inutile visto che la finestra si chiude, no?
 
Sì, in questo caso all'atto pratico è inutile.
 
Ma è un codice migliore, più versatile. Metti che un giorno tu
modifichi lo script per fare altre cose: hai una cosa in meno a cui
stare attento perché è già a posto.


 stare attento perché è già a posto.
 
e comunque, sempre meglio scrivere del codice "pulito" :)
 

e comunque, sempre meglio scrivere del codice "pulito" :)
 
Una questione di stile ;-)


 
 
ok, qualcosa ho capito, poco ma ho capito