Jump to content



Startup Services και proccesses κατά παραγγελία; Γίνεται;


Snips

Recommended Posts

Υπάρχει τρόπος να δημιουργήσεις κατά κάποιον τρόπο "προφίλς" απο services που εκκινούν με την είσοδο στα windows?

Δοκίμασα να κάνω διαφορετικούς λογαριασμούς χρηστών (administrators όλοι) αλλά ότι αλλαγή κάνεις στα services/proccesses που θες να εκκινούν στον ένα χρήστη, περιέργως ισχύει και στους άλλους.

Link to comment
Share on other sites

Λογικά επειδή τα services ξεκινάνε πριν το επίπεδο του user login. Δεν ξέρω αν γίνεται με hardware profiles, δοκίμασε το.

Yeap, όντως γίνεται με hardware profiles. http://www.blackviper.com/WinXP/xpprofiles.htm

Link to comment
Share on other sites

Χμμ... μου ήρθε μια ιδέα... τα hardware profiles πρέπει να τα επιλέξεις όταν μπουτάρει το pc, οπότε αν αλλάξεις χρήστη θα πρέπει να κάνεις restart και να επιλέξεις άλλο profile... σωστά...?

Αν ισχύει το παραπάνω, τότε μπορεί να φτιαχτεί εύκολα ένα λογισμικό το οποίο θα είναι command line και θα τρέxει μια φορά σε κάθε Login ενός χρήστη από τον φάκελο του startup του χρήστη... ο κάθε χρήστης θα έχει δικό του configuration, το οποίο θα το περνάει όταν τρέχει το πρόγραμμα και θα ξεκινάει ή θα σταματάει τα services τα οποία έχει καταχωρημένα το configuration... έχω σχεδόν έτοιμο τον κώδικα από εδώ (http://www.thelab.gr/showthread.php?t=45279) για τον έλεγχο των services από το pda που είχα γράψει, οπότε με μια μικρή μετατροπή έρχεται κουτί στο παραπάνω σενάριο...

το Σ/Κ θα το κοιτάξω...

Link to comment
Share on other sites

Έτοιμο... :hehe:

εντάξει ρα δεν είναι μόνο το κάψιμο στον εγκέφαλο, απλά ήταν καλή ιδέα και πολλοί μπορεί να το βρουν χρήσιμο...

Στα γρήγορα λοιπόν, μπορεί να έχετε όσα account θέλετε στα Windows και να έχετε αφήσει τα services στα default... πέρνετε το exe και το config.txt και τα βάζετε στον φάκελο...:

C:\Documents and Settings\[uSER_NAME]\Start Menu\Programs\Startup

και στο κάθε config.txt φτιάχνετε τα services όπως θέλετε βάση του παρακάτω format...:

SERVICE_NAME=SERVICE_START_TYPE,SERVICE_STATE

όπου...:

SERVICE_NAME, το όνομα του service όπως ακριβώς φαίνεται στο "Start->Run->Services.msc"

SERVICE_START_TYPE, το state του service που θέλετε {AUTO, MANUAL,DISABLED}

SERVICE_STATE, την κατάσταση του service που θέλετε {STOP,START}

παράδειγμα...:


#User=<USER_NAME>
#SERVICE_NAME=SERVICE_START_TYPE,SERVICE_STATE
# SERVICE_CONFIG = {AUTO,MANUAL,DISABLED}
# SERVICE_STATE = {STOP,START}
# Examples:
# Alerter=DISABLED
# Alerter=AUTO,STOP
# Alerter=MANUAL,START
User=Jaco
password=
#Alerter=DISABLED,STOP
#Apache2.2=DISABLED,STOP
#Application Management=DISABLED,STOP
#Automatic Updates=DISABLED,STOP
#Event Log=DISABLED,STOP
Alerter=DISABLED,STOP
Apache2.2=AUTO,START
Application Management=MANUAL,STOP
Automatic Updates=AUTO,START
Event Log=AUTO,START

Το user και password δεν είναι σημαντικά, αλλά τα έχω βάλει σε περίπτωση που κάποιος έχει password στο account του... δεν έχω δοκιμάσει αν δουλεύει όταν το account έχει pass για να δω αν παίζει κανονικά... :p

Ότι είναι μετά από '#' είναι σα να μην υπάρχει... οπότε καλό είναι με '#' να έχετε σημειωμένα τα defaults, έτσι ώστε αν φάει ήττα το λειτουργικό να μπορείτε να το επαναφέρεται από safe mode, είτε σβήνοντας από τον φάκελο του Startup το exe είτε βγάζοντας την '#' από τα defaults και την βάλετε στις δικές σας τροποποιήσεις...

λοιπόν λόγο χρόνου δεν έκατσα να ασχοληθώ με το error checking και τα error messages, οπότε όταν χτυπάει το πρόγραμμα βγάζει στεγνά ένα τετραφήψιο σφάλμα των windows που έχει να κάνει με τα services και αναφέρονται εδώ... Το ίδιο σφάλμα θα βγάλει αν πάτε να κάνετε την ίδια ενέργεια από το services.msc με την διαφορά ότι εκεί εξηγεί και το σφάλμα...

Επομένως, πριν γράψετε το δικό σας script βεβαιωθείτε με το services.msc ότι η σειρά και οι εντολές που θέλετε να εκτελέσει το πρόγραμμα μπορούν να εκτελεστούν κανονικά κάνοντάς το την πρώτη φορά μόνοι σας... ο λόγος για αυτό είναι ότι υπάρχουν dependencies ανάμεσα στα services με αποτέλεσμα να μην μπορεί να τρέξει ή τα τερματιστεί ένα service αν δεν πληρούνται οι κατάλληλες προϋποθέσεις...

Τα αρχεία είναι τα παρακάτω...:

http://rapidshare.com/files/168327919/config.txt

http://rapidshare.com/files/168333897/StartUpServices.exe

Αν δεν δουλεύει μόνο του το .exe τότε μάλλον χρειάζονται τα vbRuntimes ή αλλιώς τρέξτε το setup παρακάτω...:

http://rapidshare.com/files/168334145/StartUpServices.zip

και μετά κάνετε copy/paste το StartUpServices.exe με το config.txt στους startup φακέλους των χρηστών που θέλετε...

Θέλει υποχρεωτικά το config.txt να είναι παρέα στον ίδιο φάκελο με το StartUpServices.exe...

Link to comment
Share on other sites

E... στην ουσία είναι... :p

αργότερα μόλις τελειώσω κάτι άλλο, θα δοκιμάσω με script από cmd να δω μήπως μπορεί να γίνει πιο σωστά, καθώς εκεί είναι καθαρά calls στο api χωρίς ενδιάμεσα runtimes και interfaces... είμαι περίεργος... :hmm:

Link to comment
Share on other sites

Λοιπόν τελικά έκανα δοκιμές και με scripting από το command prompt των windows και το βλέπω πολύ πιο λειτουργικό και ασφαλές να γίνεται ο έλεγχος των services από εκεί, ειδικά αν μιλάμε για υπολογιστές εταιριών κλπ οπότε έγραψα ένα script-άκη που θα λατρέψουν οι admin... :rolleyes:

Οδηγείες...: απλά δημιουργήστε ένα αρχείο .txt και κάνετε copy-paste το παρακάτω script και στην συνέχεια μετονομάζετε το αρχείο σε sevices.cmd ή όπως αλλιώς θέλετε αρκεί να έχει κατάληξη (.cmd ή .bat)...

Αν θέλετε μπορείτε να το κατεβάσετε και από εδώ...


@echo off
REM Title : Startup Services Manager
REM author : jaco
REM version : 0.1
REM revision : 29.11.2008
REM instructions :
REM Create a file named services.txt and place it in the same folder with jssm.cmd (for example in 'C:\Documents and Settings\Admin\Start Menu\Programs\Startup')/
REM In this file write all the services you want to handle on startup with the following format...:
REM Syntax:
REM SERVICE_NAME SERVICE_START_TYPE SERVICE_STATE
REM where,
REM SERVICE_NAME : the real name of the service and not the display name, for example WZCSVC for Wireless Zero Configurator...
REM TIP: use cmd to find services' real name like this ('C:\sc query') which lists all services and use DISPLAY_NAME
REM
REM SERVICE_START_TYPE : this is the startup status of the service use only one from the following...:
REM {AUTO, DEMAND, DISABLED}
REM AUTO : automatic activation
REM DEMAND : manual activation
REM DISABLED : disable the service
REM
REM SERVICE_STATE : select the service's startup state... Can be only one of the following...:
REM {START, STOP}
REM
REM Examples:
REM ALERTER DEMAND STOP
REM WZCSVC AUTO START
REM THEMES DISABLED STOP
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
::Open file 'services.txt'
cls
echo ^=^= Startup Services Manager v.0.1 ^=^=
echo author: Jaco
echo revision: 29.11.2008
echo ---------
echo Starting Script... & DATE /T & TIME /T
echo ---------
for /f "tokens=*" %%T in ( 'type services.txt' ) do ( call :HandleService %%T )
echo ---------
echo Finished Script...
TIME /T
echo ---------
endlocal
goto :EOF

:HandleService
setlocal
set svr_name=%1
set svr_start_type=%2
set svr_state=%3
set /a HandleService=-1
echo Setting %svr_name% as %svr_start_type% and %svr_state%
::Check if service exists
call :GetCurrStartType %svr_name%
::echo GetCurrStartType: %GetCurrStartType%
call :GetWantedStartType %svr_start_type%
::echo GetWantedStartType: %GetWantedStartType%
if not %GetCurrStartType%==%GetWantedStartType% (
call :SetStartType %svr_name% %svr_start_type% %GetWantedStartType%
set /a HandleService=1
)
if %HandleService%==1 (
if %svr_state%==START (
call :StartService %svr_name%
) else (
call :StopService %svr_name%
)
)
endlocal & set /a HandleService=%HandleService%
goto :EOF

:StartService
setlocal
call :GetServiceState %1
if Not %GetServiceState%==START (
echo Starting service...
sc start %1 > NUL 2>&1
)
endlocal
goto :EOF

:StopService
setlocal
call :GetServiceState %1
if Not %GetServiceState%==STOP (
echo Stopping service...
sc stop %1 > NUL 2>&1
)
endlocal
goto :EOF


:GetServiceState
setlocal & set tmp_query=sc query %1
for /f "delims=: tokens=1-2" %%c in ('%tmp_query% ^| find "STATE"') do set query_result=%%d
set GetServiceState=%query_result:~1,2%
if %GetServiceState%==0 ( set GetServiceState=STOP )
if %GetServiceState%==4 ( set GetServiceState=START )
endlocal & set GetServiceState=%GetServiceState%
goto :EOF

:GetWantedStartType
setlocal & set /a type=%1
if %1==AUTO ( set /a GetWantedStartType=2 )
if %1==DEMAND ( set /a GetWantedStartType=3 )
if %1==DISABLED ( set /a GetWantedStartType=4 )
endlocal & set /a GetWantedStartType=%GetWantedStartType%
goto :EOF

:GetCurrStartType
setlocal & set tmp_query=sc qc %1
for /f "delims=: tokens=1-2" %%c in ('%tmp_query% ^| find "START_TYPE"') do set start_type=%%d
set /a GetCurrStartType=%start_type:~1,2%
endlocal & set /a GetCurrStartType=%GetCurrStartType%
goto :EOF

:SetStartType
setlocal & set tmp_query=sc config %1 start= %2
echo %tmp_query%
%tmp_query%
call :WaitForTypeToBeSet %1 %3
endlocal
goto :EOF

:WaitForTypeToBeSet %1 %2
setlocal
set /a wait_counter=0
:WaitLoop
call :GetCurrStartType %1
call :sleep_sec 1
set /a wait_counter+=1
::echo Wait %GetCurrStartType% / %2
if Not %GetCurrStartType%==%2 (
if %wait_counter%==30 (
echo Skipping after 30 secs
) else (
echo Looping
goto WaitLoop
)
) else (
set /a WaitForTypeToBeSet=1
)
endlocal & set /a WaitForTypeToBeSet=%WaitForTypeToBeSet%
goto :EOF

:Sleep_sec
ping -n %1 127.0.0.1 > NUL 2>&1
goto :EOF

Στην συνέχεια δημιουργείτε (απαραίτητα) ένα αρχείο το οποίο λέγεται services.txt μέσα στο οποίο γράφετε τα services που θέλετε να παραμετροποιήσετε μαζί με τις παραμέτρους με την παρακάτω σύνταξη...:

SERVICE_NAME SERVICE_START_TYPE SERVICE_STATE

όπου

  • SERVICE_NAME : Το όνομα του service, όχι όπως φαίνεται μέσα στο services.msc αλλά το πραγματικό όνομα, το οποίο μπορείτε να το δείτε τρέχοντας την εντολη (sc query | more) από το cmd...
  • SERVICE_START_TYPE : AUTO ή DEMAND ή DISABLED, που καθορίζει αν είναι ενεργοποιημένο το service και αν ναι με ποιόν τρόπο... το DEMAND είναι το αντίστοιχο του MANUAL που λέει στο services.msc
  • SERVICE_STATE: START ή STOP, ξεκάθαρο νομίζω

Παράδειγμα...:

services.txt

ALG DISABLED STOP
ALERTER DEMAND STOP
ALERTER AUTO START
ALERTER DISABLED STOP

Οπότε έχοντας τα δυο αυτά αρχεία (services.cmd, services.txt) στον ίδιο φάκελο τρέχετε το services.cmd και κάνει μόνο του τα υπόλοιπα, επίσης μπορεί να μπεί στο ('C:\Documents and Settings\Admin\Start Menu\Programs\Startup') ή να τρέχει πριν από κάποιο συγκεκριμένο πρόγραμμα, απλά προσθέτοντας μια γραμμή στο script...

ορίστε και ένα output...:

== Startup Services Manager v.0.1 ==
author: Jaco
revision: 29.11.2008
---------
Starting Script...
29/11/2008
09:23 πμ
---------
Setting ALG as DISABLED and STOP
Setting ALERTER as DEMAND and STOP
sc config ALERTER start= DEMAND
[SC] ChangeServiceConfig SUCCESS
Stopping service...
Setting ALERTER as AUTO and START
sc config ALERTER start= AUTO
[SC] ChangeServiceConfig SUCCESS
Starting service...
Setting ALERTER as DISABLED and STOP
sc config ALERTER start= DISABLED
[SC] ChangeServiceConfig SUCCESS
Stopping service...
---------
Finished Script...
09:23 πμ
---------

TIPS:

  • Αν την ώρα που τρέχετε το script έχετε ανοικτό το services.msc πρέπει να κάνετε δεξί κλικ -> refresh για να δείτε τις αλλαγές που έγιναν από το script
  • Τα dependencies θα πρέπει να τα ξέρετε εσείς και να τα λάβετε υπόψη και όταν πχ τερματίζετε ένα service το οποίο έχει dependency ένα άλλο τότε θα πρέπει να τα τερματίζετε με την σειρά που πρέπει... τα dependencies τα βλέπετε εύκολα από το cmd δίνοντας (sc qc SERVICE_NAME)... ίσως κάποια μέρα ενσωματώσω στο script να κάνει αυτόματο έλεγχο στα dependencies και να τα κλείνει/ανοίγει μόνο του, αλλά είναι λίγο περιττό καθώς είναι υπόθεση 1λεπτού να γίνει μέσα στο services.txt...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.