Changeset 2250


Ignore:
Timestamp:
10/23/2010 2:47:40 AM (4 years ago)
Author:
lowjoel
Message:

Fixed command-line generation error after we passed the parent HWND to the Eraser binary for shell execution.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser/Eraser.Shell/CtxMenu.cpp

    r2247 r2250  
    955955 
    956956        //Compile the final set of parameters we are going to pass to Eraser. 
    957         std::wstring finalParameters(L"shell /quiet "); 
     957        std::wostringstream finalParameters; 
     958        finalParameters << L"shell /quiet "; 
    958959 
    959960        //Set the action selected by the user. 
     
    961962        { 
    962963        case ACTION_ERASE: 
    963             finalParameters += L"/action=EraseNow "; 
     964            finalParameters << L"/action=EraseNow "; 
    964965            break; 
    965966        case ACTION_ERASE_ON_RESTART: 
    966             finalParameters += L"/action=EraseOnRestart "; 
     967            finalParameters << L"/action=EraseOnRestart "; 
    967968            break; 
    968969        case ACTION_ERASE_UNUSED_SPACE: 
    969             finalParameters += L"/action=EraseUnusedSpace "; 
     970            finalParameters << L"/action=EraseUnusedSpace "; 
    970971            break; 
    971972        case ACTION_SECURE_MOVE: 
    972973        case ACTION_SECURE_PASTE: 
    973             finalParameters += L"/action=SecureMove "; 
     974            finalParameters << L"/action=SecureMove "; 
    974975            break; 
    975976        default: 
     
    978979 
    979980        //Pass Explorer's HWND to the child process, in the event that it is required. 
    980         std::wostringstream stream; 
    981         stream << L" /parent=" << (size_t)parent; 
    982         finalParameters += stream.str(); 
     981        finalParameters << L" /parent=" << (size_t)parent << L' '; 
    983982 
    984983        //Then append the rest of the arguments, depending on the length. 
     
    10011000                stream << parameters; 
    10021001 
    1003                 finalParameters += L"\"@"; 
    1004                 finalParameters += buffer; 
    1005                 finalParameters += '"'; 
     1002                finalParameters << L"\"@" << buffer << L'"'; 
    10061003            } 
    10071004            else 
    10081005            { 
    10091006                //Short command line, pass directly to the program 
    1010                 finalParameters += parameters; 
     1007                finalParameters << parameters; 
    10111008            } 
    10121009        } 
     
    10171014        { 
    10181015            int result = reinterpret_cast<int>(ShellExecute(parent, L"runas", 
    1019                 eraserPath.c_str(), finalParameters.c_str(), NULL, show)); 
     1016                eraserPath.c_str(), finalParameters.str().c_str(), NULL, show)); 
    10201017            if (result <= 32) 
    10211018                switch (result) 
     
    10591056            PROCESS_INFORMATION processInfo; 
    10601057            ZeroMemory(&processInfo, sizeof(processInfo)); 
    1061             std::vector<wchar_t> buffer(eraserPath.length() + finalParameters.length() + 4); 
     1058            std::vector<wchar_t> buffer(eraserPath.length() + finalParameters.str().length() + 4); 
    10621059            wcscpy_s(&buffer.front(), buffer.size(), (L"\"" + eraserPath + L"\" " + 
    1063                 finalParameters).c_str()); 
     1060                finalParameters.str()).c_str()); 
    10641061 
    10651062            if (!CreateProcess(NULL, &buffer.front(), NULL, NULL, true, CREATE_NO_WINDOW, 
Note: See TracChangeset for help on using the changeset viewer.