From 07c2f6d0c539fe0ee29150ab319442d18c1d2765 Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Tue, 28 Aug 2007 19:54:25 +0000 Subject: [PATCH] - improve the start code - add an edit button on the properties dialog to give admins the option to modify the service config svn path=/trunk/; revision=28630 --- .../mscutils/servman/lang/bg-BG.rc | 3 +- .../mscutils/servman/lang/de-DE.rc | 3 +- .../mscutils/servman/lang/en-US.rc | 3 +- .../mscutils/servman/lang/fr-FR.rc | 3 +- .../mscutils/servman/lang/id-ID.rc | 3 +- .../mscutils/servman/lang/it-IT.rc | 3 +- .../mscutils/servman/lang/pl-PL.rc | 3 +- .../mscutils/servman/lang/ru-RU.rc | 3 +- .../mscutils/servman/lang/th-TH.rc | 3 +- .../applications/mscutils/servman/mainwnd.c | 8 +- .../applications/mscutils/servman/precomp.h | 5 +- .../applications/mscutils/servman/propsheet.c | 80 ++++++--- .../applications/mscutils/servman/query.c | 8 +- .../applications/mscutils/servman/resource.h | 1 + .../applications/mscutils/servman/start.c | 153 ++++++++---------- 15 files changed, 157 insertions(+), 125 deletions(-) diff --git a/reactos/base/applications/mscutils/servman/lang/bg-BG.rc b/reactos/base/applications/mscutils/servman/lang/bg-BG.rc index e1bf1a2fe32..56f72eea4d6 100644 --- a/reactos/base/applications/mscutils/servman/lang/bg-BG.rc +++ b/reactos/base/applications/mscutils/servman/lang/bg-BG.rc @@ -74,7 +74,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "Îáùî" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -100,6 +100,7 @@ BEGIN LTEXT "Ìîæåòå äà çàäàäåòå ïóñêîâè óêàçàíèÿ, êîèòî äà ñå ïðèëîæàò ïðè ïóñêàíå íà óñëóãàòà îò òóê.",IDC_STATIC, 6,177,240,15 LTEXT "Ïóñêîâè óêàçàòåëè:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/de-DE.rc b/reactos/base/applications/mscutils/servman/lang/de-DE.rc index 2c43cd8f265..56e6f416a99 100644 --- a/reactos/base/applications/mscutils/servman/lang/de-DE.rc +++ b/reactos/base/applications/mscutils/servman/lang/de-DE.rc @@ -74,7 +74,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "Allgemein" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -98,6 +98,7 @@ BEGIN LTEXT "Sie können die Startparameter angeben, die übernommen werden sollen, wenn der Dienst von hier aus gestartet wird.",IDC_STATIC, 6,177,240,20 LTEXT "Startparameter:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/en-US.rc b/reactos/base/applications/mscutils/servman/lang/en-US.rc index 8b3d8c22266..d26cbe121a4 100644 --- a/reactos/base/applications/mscutils/servman/lang/en-US.rc +++ b/reactos/base/applications/mscutils/servman/lang/en-US.rc @@ -74,7 +74,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6, 6, 253, 232 CAPTION "General" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -98,6 +98,7 @@ BEGIN LTEXT "You can specify the start parameters that apply when you start the service from here.",IDC_STATIC, 6,177,240,15 LTEXT "Start parameters:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/fr-FR.rc b/reactos/base/applications/mscutils/servman/lang/fr-FR.rc index ea1422618f4..392838c4caf 100644 --- a/reactos/base/applications/mscutils/servman/lang/fr-FR.rc +++ b/reactos/base/applications/mscutils/servman/lang/fr-FR.rc @@ -75,7 +75,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "Général" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -99,6 +99,7 @@ BEGIN LTEXT "Vous pouvez définir les paramètres passés au service lorsque vous le démarrez.",IDC_STATIC, 6,177,240,15 LTEXT "Paramètres:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/id-ID.rc b/reactos/base/applications/mscutils/servman/lang/id-ID.rc index 9ae9770356c..5ec80bd9871 100644 --- a/reactos/base/applications/mscutils/servman/lang/id-ID.rc +++ b/reactos/base/applications/mscutils/servman/lang/id-ID.rc @@ -74,7 +74,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "Umum" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -98,6 +98,7 @@ BEGIN LTEXT "Anda menetapkan parameter mulai yang diterapkan ketika anda memulai layanan dari sini.",IDC_STATIC, 6,177,240,15 LTEXT "Parameter Mulai:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/it-IT.rc b/reactos/base/applications/mscutils/servman/lang/it-IT.rc index 599166320f1..0156ecba15f 100644 --- a/reactos/base/applications/mscutils/servman/lang/it-IT.rc +++ b/reactos/base/applications/mscutils/servman/lang/it-IT.rc @@ -74,7 +74,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "General" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -98,6 +98,7 @@ BEGIN LTEXT "Puoi indicarei parametri in uso quando il servizio è avviato da qui.",IDC_STATIC, 6,177,240,15 LTEXT "Parametri di avvio:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/pl-PL.rc b/reactos/base/applications/mscutils/servman/lang/pl-PL.rc index 1b7ff75db60..139758fc2ae 100644 --- a/reactos/base/applications/mscutils/servman/lang/pl-PL.rc +++ b/reactos/base/applications/mscutils/servman/lang/pl-PL.rc @@ -81,7 +81,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "Ogólny" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -105,6 +105,7 @@ BEGIN LTEXT "Mo¿esz okreœli parametry pocz¹tkowe, które bêd¹ u¿yte przy uruchomieniu us³ugi z tego miejsca.",IDC_STATIC, 6,177,240,15 LTEXT "Parametry uruchomienia:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/ru-RU.rc b/reactos/base/applications/mscutils/servman/lang/ru-RU.rc index ab85f41d60c..a5bb7acc734 100644 --- a/reactos/base/applications/mscutils/servman/lang/ru-RU.rc +++ b/reactos/base/applications/mscutils/servman/lang/ru-RU.rc @@ -73,7 +73,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "Îáùèå" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -97,6 +97,7 @@ BEGIN LTEXT "Ìîæíî óêàçàòü ïàðàìåòðû çàïóñêà, ïðèìåíÿåìûå ïðè çàïóñêå ñëóæáû èç ýòîãî êàòàëîãà.",IDC_STATIC, 6,177,240,15 LTEXT "Ïàðàìåòðû çàïóñêà:", IDC_STATIC, 6, 200, 73, 11 EDITTEXT IDC_START_PARAM, 78, 199, 168, 11, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/lang/th-TH.rc b/reactos/base/applications/mscutils/servman/lang/th-TH.rc index d4e11effbc1..766db1c8b36 100644 --- a/reactos/base/applications/mscutils/servman/lang/th-TH.rc +++ b/reactos/base/applications/mscutils/servman/lang/th-TH.rc @@ -83,7 +83,7 @@ BEGIN EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE END -IDD_DLG_GENERAL DIALOGEX 6,6,253,225 +IDD_DLG_GENERAL DIALOGEX 6,6,253,232 CAPTION "·ÑèÇä»" FONT 8, "MS Shell Dlg",0,0 STYLE WS_BORDER | WS_VISIBLE | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME | WS_GROUP | WS_TABSTOP @@ -107,6 +107,7 @@ BEGIN LTEXT "¤Ø³ÊÒÁÒö¡Ó˹´¤èÒµÑÇá»ÃµèÒ§æ㹵͹àÃÔèÁµé¹¡ÒÃãªé§Ò¹ àÁ×èͤسàÃÔèÁãËéºÃÔ¡Ò÷ÕèµÃ§¹Õé.",IDC_STATIC, 6,177,240,15 LTEXT "àÃÔèÁµé¹¤èÒµÑÇá»ÃµèÒ§æ:", IDC_STATIC, 6, 200, 58, 11 EDITTEXT IDC_START_PARAM, 68, 199, 178, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Edit", IDC_EDIT, 192, 215, 54, 15, WS_DISABLED END IDD_DLG_DEPEND DIALOGEX 6,6,253,225 diff --git a/reactos/base/applications/mscutils/servman/mainwnd.c b/reactos/base/applications/mscutils/servman/mainwnd.c index a842acde4b4..78149a4b74b 100644 --- a/reactos/base/applications/mscutils/servman/mainwnd.c +++ b/reactos/base/applications/mscutils/servman/mainwnd.c @@ -122,7 +122,7 @@ UpdateMainStatusBar(PMAIN_WND_INFO Info) { SendMessage(Info->hStatus, SB_SIMPLE, - (WPARAM)Info->InMenuLoop, + (WPARAM)Info->bInMenuLoop, 0); } } @@ -624,6 +624,8 @@ InitMainWnd(PMAIN_WND_INFO Info) Info->hShortcutMenu = GetSubMenu(Info->hShortcutMenu, 0); + Info->bIsUserAnAdmin = IsUserAnAdmin(); + return TRUE; } @@ -1055,14 +1057,14 @@ MainWndProc(HWND hwnd, case WM_ENTERMENULOOP: { - Info->InMenuLoop = TRUE; + Info->bInMenuLoop = TRUE; UpdateMainStatusBar(Info); break; } case WM_EXITMENULOOP: { - Info->InMenuLoop = FALSE; + Info->bInMenuLoop = FALSE; UpdateMainStatusBar(Info); break; } diff --git a/reactos/base/applications/mscutils/servman/precomp.h b/reactos/base/applications/mscutils/servman/precomp.h index 45cdcd56b23..b245043b7e9 100644 --- a/reactos/base/applications/mscutils/servman/precomp.h +++ b/reactos/base/applications/mscutils/servman/precomp.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "resource.h" #ifdef _MSC_VER @@ -30,7 +31,8 @@ typedef struct _MAIN_WND_INFO INT SelectedItem;/* selection number in the list view */ BOOL bDlgOpen; - BOOL InMenuLoop; + BOOL bInMenuLoop; + BOOL bIsUserAnAdmin; } MAIN_WND_INFO, *PMAIN_WND_INFO; @@ -72,6 +74,7 @@ VOID CompleteProgressBar(HWND hProgDlg); /* query.c */ ENUM_SERVICE_STATUS_PROCESS* GetSelectedService(PMAIN_WND_INFO Info); LPQUERY_SERVICE_CONFIG GetServiceConfig(LPTSTR lpServiceName); +VOID SetServiceConfig(LPQUERY_SERVICE_CONFIG); LPTSTR GetServiceDescription(LPTSTR lpServiceName); LPTSTR GetExecutablePath(LPTSTR lpServiceName); BOOL RefreshServiceList(PMAIN_WND_INFO Info); diff --git a/reactos/base/applications/mscutils/servman/propsheet.c b/reactos/base/applications/mscutils/servman/propsheet.c index 40bb7dfd5b1..52de5ee4858 100644 --- a/reactos/base/applications/mscutils/servman/propsheet.c +++ b/reactos/base/applications/mscutils/servman/propsheet.c @@ -190,9 +190,41 @@ GetDlgInfo(PSERVICEPROPSHEET dlgInfo, 0, (LPARAM)szServiceStatus); } + + if (dlgInfo->Info->bIsUserAnAdmin) + { + HWND hEdit = GetDlgItem(hwndDlg, + IDC_EDIT); + EnableWindow(hEdit, + TRUE); + } } +SaveDlgInfo(PSERVICEPROPSHEET dlgInfo, + HWND hwndDlg) +{ + LPQUERY_SERVICE_CONFIG pServiceConfig = NULL; + HWND hList; + DWORD StartUp; + + hList = GetDlgItem(hwndDlg, IDC_START_TYPE); + + StartUp = SendMessage(hList, + CB_GETCURSEL, + 0, + 0); + + switch (StartUp) + { + case 0: pServiceConfig->dwStartType = SERVICE_AUTO_START; break; + case 1: pServiceConfig->dwStartType = SERVICE_DEMAND_START; break; + case 2: pServiceConfig->dwStartType = SERVICE_DISABLED; break; + } +} + + + /* * General Property dialog callback. * Controls messages to the General dialog @@ -258,15 +290,26 @@ GeneralPageProc(HWND hwndDlg, //SendMessage(Info->hMainWnd, WM_COMMAND, ID_RESUME, 0); break; + case IDC_EDIT: + { + HWND hName, hDesc, hExePath; + + hName = GetDlgItem(hwndDlg, IDC_DISP_NAME); + hDesc = GetDlgItem(hwndDlg, IDC_DESCRIPTION); + hExePath = GetDlgItem(hwndDlg, IDC_EXEPATH); + + SendMessage(hName, EM_SETREADONLY, FALSE, 0); + SendMessage(hDesc, EM_SETREADONLY, FALSE, 0); + SendMessage(hExePath, EM_SETREADONLY, FALSE, 0); + } + break; + case IDC_START_PARAM: PropSheet_Changed(GetParent(hwndDlg), hwndDlg); break; } break; - case WM_DESTROY: - break; - case WM_NOTIFY: { LPNMHDR lpnm = (LPNMHDR)lParam; @@ -296,13 +339,13 @@ DependanciesPageProc(HWND hwndDlg, WPARAM wParam, LPARAM lParam) { - PMAIN_WND_INFO Info; + PSERVICEPROPSHEET dlgInfo; /* Get the window context */ - Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwndDlg, - GWLP_USERDATA); + dlgInfo = (PSERVICEPROPSHEET)GetWindowLongPtr(hwndDlg, + GWLP_USERDATA); - if (Info == NULL && uMsg != WM_INITDIALOG) + if (dlgInfo == NULL && uMsg != WM_INITDIALOG) { return FALSE; } @@ -311,12 +354,12 @@ DependanciesPageProc(HWND hwndDlg, { case WM_INITDIALOG: { - Info = (PMAIN_WND_INFO)(((LPPROPSHEETPAGE)lParam)->lParam); - if (Info != NULL) + dlgInfo = (PSERVICEPROPSHEET)(((LPPROPSHEETPAGE)lParam)->lParam); + if (dlgInfo != NULL) { SetWindowLongPtr(hwndDlg, GWLP_USERDATA, - (LONG_PTR)Info); + (LONG_PTR)dlgInfo); } } break; @@ -327,21 +370,6 @@ DependanciesPageProc(HWND hwndDlg, } break; - - case WM_DESTROY: - break; - - case WM_NOTIFY: - { - LPNMHDR lpnm = (LPNMHDR)lParam; - - switch (lpnm->code) - { - - } - - } - break; } return FALSE; @@ -404,7 +432,7 @@ OpenPropSheet(PMAIN_WND_INFO Info) ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); psh.dwSize = sizeof(PROPSHEETHEADER); - psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USECALLBACK; + psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USECALLBACK;// | PSH_MODELESS; psh.hwndParent = Info->hMainWnd; psh.hInstance = hInstance; psh.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SM_ICON)); diff --git a/reactos/base/applications/mscutils/servman/query.c b/reactos/base/applications/mscutils/servman/query.c index a9ad6ec3a13..8442576ff61 100644 --- a/reactos/base/applications/mscutils/servman/query.c +++ b/reactos/base/applications/mscutils/servman/query.c @@ -90,6 +90,13 @@ cleanup: } +VOID +SetServiceConfig(LPQUERY_SERVICE_CONFIG pServiceConfig) +{ + +} + + LPTSTR GetServiceDescription(LPTSTR lpServiceName) { @@ -162,7 +169,6 @@ cleanup: - static BOOL GetServiceList(PMAIN_WND_INFO Info, DWORD *NumServices) diff --git a/reactos/base/applications/mscutils/servman/resource.h b/reactos/base/applications/mscutils/servman/resource.h index c5476ce1339..b5df91c4185 100644 --- a/reactos/base/applications/mscutils/servman/resource.h +++ b/reactos/base/applications/mscutils/servman/resource.h @@ -132,6 +132,7 @@ #define IDC_PAUSE 10151 #define IDC_RESUME 10161 #define IDC_START_PARAM 10191 +#define IDC_EDIT 10192 /* dependancies dialog */ #define IDD_DLG_DEPEND 20001 diff --git a/reactos/base/applications/mscutils/servman/start.c b/reactos/base/applications/mscutils/servman/start.c index ff40f66f339..19fd099c921 100644 --- a/reactos/base/applications/mscutils/servman/start.c +++ b/reactos/base/applications/mscutils/servman/start.c @@ -19,107 +19,90 @@ DoStartService(PMAIN_WND_INFO Info, DWORD BytesNeeded = 0; INT ArgCount = 0; DWORD dwStartTickCount, dwOldCheckPoint; + BOOL bRet = FALSE; - /* open handle to the SCM */ hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (hSCManager == NULL) { - GetError(); - return FALSE; - } - - /* get a handle to the service requested for starting */ - hSc = OpenService(hSCManager, - Info->pCurrentService->lpServiceName, - SERVICE_ALL_ACCESS); - if (hSc == NULL) - { - GetError(); - return FALSE; - } - - /* start the service opened */ - if (! StartService(hSc, - ArgCount, - NULL)) - { - GetError(); - return FALSE; - } - - /* query the state of the service */ - if (! QueryServiceStatusEx(hSc, - SC_STATUS_PROCESS_INFO, - (LPBYTE)&ServiceStatus, - sizeof(SERVICE_STATUS_PROCESS), - &BytesNeeded)) - { - GetError(); - return FALSE; - } - - /* Save the tick count and initial checkpoint. */ - dwStartTickCount = GetTickCount(); - dwOldCheckPoint = ServiceStatus.dwCheckPoint; - - /* loop whilst service is not running */ - /* FIXME: needs more control adding. 'Loop' is temparary */ - while (ServiceStatus.dwCurrentState != SERVICE_RUNNING) - { - DWORD dwWaitTime; - - dwWaitTime = ServiceStatus.dwWaitHint / 10; - - if( dwWaitTime < 500 ) - dwWaitTime = 500; - else if ( dwWaitTime > 5000 ) - dwWaitTime = 5000; - - IncrementProgressBar(hProgDlg); - - /* wait before checking status */ - Sleep(ServiceStatus.dwWaitHint / 8); - - /* check status again */ - if (! QueryServiceStatusEx(hSc, - SC_STATUS_PROCESS_INFO, - (LPBYTE)&ServiceStatus, - sizeof(SERVICE_STATUS_PROCESS), - &BytesNeeded)) + hSc = OpenService(hSCManager, + Info->pCurrentService->lpServiceName, + SERVICE_ALL_ACCESS); + if (hSc != NULL) { - GetError(); - return FALSE; - } - - if (ServiceStatus.dwCheckPoint > dwOldCheckPoint) - { - /* The service is making progress. increment the progress bar */ - IncrementProgressBar(hProgDlg); - dwStartTickCount = GetTickCount(); - dwOldCheckPoint = ServiceStatus.dwCheckPoint; - } - else - { - if(GetTickCount() - dwStartTickCount > ServiceStatus.dwWaitHint) + if (StartService(hSc, + ArgCount, + NULL)) { - /* No progress made within the wait hint */ - break; - } - } - } + if (QueryServiceStatusEx(hSc, + SC_STATUS_PROCESS_INFO, + (LPBYTE)&ServiceStatus, + sizeof(SERVICE_STATUS_PROCESS), + &BytesNeeded)) + { + dwStartTickCount = GetTickCount(); + dwOldCheckPoint = ServiceStatus.dwCheckPoint; - CloseServiceHandle(hSc); + while (ServiceStatus.dwCurrentState != SERVICE_RUNNING) + { + DWORD dwWaitTime; + + dwWaitTime = ServiceStatus.dwWaitHint / 10; + + if(dwWaitTime < 1000) + dwWaitTime = 500; + else if (dwWaitTime > 10000) + dwWaitTime = 10000; + + IncrementProgressBar(hProgDlg); + Sleep(dwWaitTime ); + IncrementProgressBar(hProgDlg); + + if (!QueryServiceStatusEx(hSc, + SC_STATUS_PROCESS_INFO, + (LPBYTE)&ServiceStatus, + sizeof(SERVICE_STATUS_PROCESS), + &BytesNeeded)) + { + break; + } + + if (ServiceStatus.dwCheckPoint > dwOldCheckPoint) + { + /* The service is making progress, increment the progress bar */ + IncrementProgressBar(hProgDlg); + dwStartTickCount = GetTickCount(); + dwOldCheckPoint = ServiceStatus.dwCheckPoint; + } + else + { + if(GetTickCount() - dwStartTickCount > ServiceStatus.dwWaitHint) + { + /* No progress made within the wait hint */ + break; + } + } + } + } + } + + CloseServiceHandle(hSc); + } + + CloseServiceHandle(hSCManager); + } if (ServiceStatus.dwCurrentState == SERVICE_RUNNING) { CompleteProgressBar(hProgDlg); Sleep(1000); - return TRUE; + bRet = TRUE; } else - return FALSE; + GetError(); + + return bRet; }