From: Eric Kohl Date: Sun, 10 Jul 2016 21:54:17 +0000 (+0000) Subject: [SERVMGR] X-Git-Tag: ReactOS-0.4.2~118 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=3d32d3faaf4703616ef65ab389d53c3c81fa207d [SERVMGR] Service recovery page: - Dissect the 'run process' command line and display it. - Implement the 'Browse' button. svn path=/trunk/; revision=71892 --- diff --git a/reactos/base/applications/mscutils/servman/propsheet_recovery.c b/reactos/base/applications/mscutils/servman/propsheet_recovery.c index 36ccffba21c..3c618576670 100644 --- a/reactos/base/applications/mscutils/servman/propsheet_recovery.c +++ b/reactos/base/applications/mscutils/servman/propsheet_recovery.c @@ -168,8 +168,9 @@ ShowFailureActions( HWND hwndDlg, PRECOVERYDATA pRecoveryData) { - WCHAR szBuffer[32]; - INT i, index, id; + WCHAR szBuffer[256]; + PWSTR startPtr, endPtr; + INT i, index, id, length; for (i = 0; i < min(pRecoveryData->pServiceFailure->cActions, 3); i++) { @@ -225,6 +226,71 @@ ShowFailureActions( WM_SETTEXT, 0, (LPARAM)szBuffer); + + if (pRecoveryData->pServiceFailure->lpCommand != NULL) + { + ZeroMemory(szBuffer, sizeof(szBuffer)); + + startPtr = pRecoveryData->pServiceFailure->lpCommand; + if (*startPtr == L'\"') + startPtr++; + + endPtr = wcschr(startPtr, L'\"'); + if (endPtr != NULL) + { + length = (INT)((LONG_PTR)endPtr - (LONG_PTR)startPtr); + CopyMemory(szBuffer, startPtr, length); + } + else + { + wcscpy(szBuffer, startPtr); + } + + SendDlgItemMessageW(hwndDlg, + IDC_PROGRAM, + WM_SETTEXT, + 0, + (LPARAM)szBuffer); + + ZeroMemory(szBuffer, sizeof(szBuffer)); + + if (endPtr != NULL) + { + startPtr = endPtr + 1; + while (iswspace(*startPtr)) + startPtr++; + + endPtr = wcsstr(pRecoveryData->pServiceFailure->lpCommand, L"/fail=%1%"); + if (endPtr != NULL) + { + while (iswspace(*(endPtr - 1))) + endPtr--; + + length = (INT)((LONG_PTR)endPtr - (LONG_PTR)startPtr); + CopyMemory(szBuffer, startPtr, length); + } + else + { + wcscpy(szBuffer, startPtr); + } + + SendDlgItemMessageW(hwndDlg, + IDC_PARAMETERS, + WM_SETTEXT, + 0, + (LPARAM)szBuffer); + + endPtr = wcsstr(pRecoveryData->pServiceFailure->lpCommand, L"/fail=%1%"); + if (endPtr != NULL) + { + SendDlgItemMessageW(hwndDlg, + IDC_ADD_FAILCOUNT, + BM_SETCHECK, + BST_CHECKED, + 0); + } + } + } } @@ -272,6 +338,35 @@ UpdateFailureActions( } +static +VOID +BrowseFile( + HWND hwndDlg) +{ + WCHAR szFile[MAX_PATH] = {'\0'}; + PWCHAR pszFilter = L"Executable Files (*.exe;*.com;*.cmd;*.bat)\0*.exe;*.com;*.cmd;*.bat\0"; + OPENFILENAME ofn; + + ZeroMemory(&ofn, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.Flags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ENABLESIZING; + ofn.hwndOwner = hwndDlg; + ofn.lpstrFilter = pszFilter; + ofn.lpstrFile = szFile; + ofn.nMaxFile = MAX_PATH; + + if (GetOpenFileName(&ofn)) + { + SendDlgItemMessageW(hwndDlg, + IDC_PROGRAM, + WM_SETTEXT, + 0, + (LPARAM)szFile); + } +} + + INT_PTR CALLBACK RecoveryPageProc( @@ -331,6 +426,10 @@ RecoveryPageProc( PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } break; + + case IDC_BROWSE_PROGRAM: + BrowseFile(hwndDlg); + break; } break;