Freigeben über


IInitiateWinSATAssessment::InitiateAssessment-Methode (winsatcominterfacei.h)

[IInitiateWinSATAssessment::InitiateAssessment kann für Releases nach Windows 8.1 geändert oder nicht mehr verfügbar sein.]

Initiiert eine Ad-hoc-Bewertung.

Syntax

HRESULT InitiateAssessment(
  [in]           LPCWSTR               cmdLine,
  [in, optional] IWinSATInitiateEvents *pCallbacks,
  [in, optional] HWND                  callerHwnd
);

Parameter

[in] cmdLine

Befehlszeilenargumente, die an WinSAT übergeben werden sollen. Die Befehlszeile darf nicht leer sein. Informationen zur Befehlszeilennutzung finden Sie unter WinSAT-Befehlsreferenz in Microsoft TechNet.

[in, optional] pCallbacks

Eine IWinSATInitiateEvents-Schnittstelle , die Sie implementieren, um Benachrichtigungen zu erhalten, wenn die Bewertung abgeschlossen ist oder Fortschritte macht. Kann NULL sein, wenn Sie keine Benachrichtigungen erhalten möchten.

[in, optional] callerHwnd

Das Fensterhandle Ihres Clients. Das Handle wird verwendet, um die WinSAT-Dialogfelder zu zentrieren. Bei NULL werden die Dialogfelder auf dem Desktop zentriert.

Rückgabewert

Diese Methode kann einen dieser Werte zurückgeben.

In der folgenden Tabelle sind einige der HRESULT-Werte aufgeführt, die von dieser Methode zurückgegeben werden.

Rückgabecode/-wert BESCHREIBUNG
S_OK
WinSAT wurde erfolgreich gestartet. Um festzustellen, ob die Bewertung erfolgreich ausgeführt wurde, implementieren Sie die IWinSATInitiateEvents::WinSATComplete-Methode , und überprüfen Sie den Wert des hresult-Parameters .
WINSAT_ERROR_COMMAND_LINE_EMPTY
0x80040009
Die Befehlszeile darf nicht leer sein. Sie müssen Befehlszeilenargumente bereitstellen.
WINSAT_ERROR_COMMAND_LINE_TOO_LONG
0x8004000A
Die Befehlszeile ist zu lang. Die maximale Länge beträgt 30.720 Bytes.
WINSAT_ERROR_WINSAT_DOES_NOT_EXIST
0x80040011
Das WinSAT-Programm konnte nicht gefunden werden, wo erwartet.

Hinweise

Sie führen in der Regel eine Ad-hoc-Bewertung durch, um einen Teilkomponenten des Computers zu bewerten, während eine formale Bewertung alle Teilkomponenten des Computers bewertet. Um eine formale Bewertung auszuführen, rufen Sie die IInitiateWinSATAssessment::InitiateFormalAssessment-Methode auf .

Ad-hoc-Bewertungen werden nicht im WinSAT-Datenspeicher gespeichert. nur formale Bewertungen werden im Datenspeicher gespeichert (Sie können die IQueryRecentWinSATAssessment-Schnittstelle nicht verwenden, um die Ergebnisse abzufragen). Um die Ergebnisse einer Ad-hoc-Bewertung zu erhalten, fügen Sie das Argument –xml FileName ein, das die Ergebnisse in einer XML-Datei speichert, die Sie später analysieren können.

WinSAT erfordert Administratorrechte für die Ausführung. Wenn der Benutzer nicht über Administratorrechte verfügt, zeigt WinSAT ein Dialogfeld an, das nach Anmeldeinformationen fragt.

Beispiele

Das folgende Beispiel zeigt, wie Sie eine Ad-hoc-Bewertung ausführen und Benachrichtigungen über den Fortschritt erhalten.

#include <windows.h>
#include <stdio.h>
#include <conio.h>  // For kbhit()
#include <winsatcominterfacei.h>

#pragma comment(lib, "ole32.lib")

BOOL IsKeyEvent(HANDLE hStdIn);


// Class that implements IWinSATInitiateEvents. Implement this class to
// get progress information and completion notification.
class CWinSATCallbacks : public IWinSATInitiateEvents
{
    LONG m_lRefCount;

public:

    // Constructor, Destructor
    CWinSATCallbacks() {m_lRefCount = 1;};
    ~CWinSATCallbacks() {};

    // IUnknown methods
    HRESULT __stdcall QueryInterface(REFIID riid, LPVOID *ppvObj);
    ULONG __stdcall AddRef();
    ULONG __stdcall Release();

    // IWinSATInitiateEvents methods
    HRESULT __stdcall WinSATComplete(HRESULT hr, LPCWSTR description);
    HRESULT __stdcall WinSATUpdate(UINT currentTick, UINT tickTotal, LPCWSTR currentState);
};


HRESULT CWinSATCallbacks::QueryInterface(REFIID riid, LPVOID* ppvObj) 
{
    if (riid == __uuidof(IUnknown) || riid == __uuidof(IWinSATInitiateEvents)) 
    {
        *ppvObj = this;
    }
    else
    {
        *ppvObj = NULL;
        return E_NOINTERFACE;
    }

    AddRef();
    return NOERROR;
}

ULONG CWinSATCallbacks::AddRef() 
{
    return InterlockedIncrement(&m_lRefCount);
}

ULONG CWinSATCallbacks::Release() 
{
    ULONG  ulCount = InterlockedDecrement(&m_lRefCount);

    if(0 == ulCount) 
    {
        delete this;
    }

    return ulCount;
}

// Is called when WinSAT completes the assessment or an error occurs.
HRESULT CWinSATCallbacks::WinSATComplete(HRESULT hr, LPCWSTR description)
{
    if (SUCCEEDED(hr))
    {
        wprintf(L"\n*** %s", description);
    }
    else
    {
        wprintf(L"\n*** The assessment failed with 0x%x (%s)\n", hr, description);
    }

    return S_OK;
}

// There is no progress information for ad hoc assessment. The method provides the 
// name of the component being assessed.
HRESULT CWinSATCallbacks::WinSATUpdate(UINT currentTick, UINT tickTotal, LPCWSTR currentState)
{
    return S_OK;
}


void main(void)
{
    HRESULT hr = S_OK;
    IInitiateWinSATAssessment* pAssessment = NULL;
    CWinSATCallbacks* pCallbacks = NULL;  // Class that implements IWinSATInitiateEvents
    LPWSTR pCommand = L"mem -buffersize 32MB -xml .\\MemoryAssessment.xml";
    HANDLE hConsole = INVALID_HANDLE_VALUE;
    DWORD dwWait = 0;

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

    // Get an instance of the assessment interface.
    hr = CoCreateInstance(__uuidof(CInitiateWinSAT),
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          __uuidof(IInitiateWinSATAssessment),
                          (void**)&pAssessment);

    if (FAILED(hr))
    {
        wprintf(L"Failed to create an instance of IInitiateWinSATAssessment. Failed with 0x%x.\n", hr);
        goto cleanup;
    }

    wprintf(L"Running formal assessment... hit any key when complete.\n");

    // Get a handle for console input, so you can break out of the loop.
    hConsole = GetStdHandle(STD_INPUT_HANDLE);
    if (INVALID_HANDLE_VALUE == hConsole)
    {
        wprintf(L"GetStdHandle failed with %lu.\n", GetLastError());
        goto cleanup;
    }

    pCallbacks = new CWinSATCallbacks();
    if (NULL == pCallbacks)
    {
        wprintf(L"Failed to create an instance of the CWinSATCallbacks class.\n");
        goto cleanup;
    }

    // Run the formal assessment.
    hr = pAssessment->InitiateAssessment(pCommand, pCallbacks, NULL);
    if (FAILED(hr))
    {
        // This is a failure to start WinSAT. If WinSAT fails while running, 
        // your implementation of the IWinSATInitiateEvents::WinSATComplete 
        // method will receive the failure code.
        wprintf(L"InitiateFormalAssessment failed with 0x%x.\n", hr);
        goto cleanup;
    }

    // Loop until the user presses a key or there is an error.
    while (true)
    {
        dwWait = WaitForSingleObject(hConsole, INFINITE);

        if (WAIT_OBJECT_0 == dwWait)  // Console input
        {
            if (IsKeyEvent(hConsole))
                break;
        }
        else if (WAIT_FAILED == dwWait)
        {
            wprintf(L"WaitForSingleObject failed with %lu\n", GetLastError());
            break;
        }
    }

cleanup:

    if (pAssessment)
        pAssessment->Release();

    if (pCallbacks)
        pCallbacks->Release();

    if (hConsole)
        CloseHandle(hConsole);

    CoUninitialize();
}

// Determines whether the console input was a key event.
BOOL IsKeyEvent(HANDLE hStdIn)
{
    INPUT_RECORD Record[128];
    DWORD dwRecordsRead = 0;
    BOOL fKeyPress = FALSE;

    if (ReadConsoleInput(hStdIn, Record, 128, &dwRecordsRead))
    {
        for (DWORD i = 0; i < dwRecordsRead; i++)
        {
            if (KEY_EVENT == Record[i].EventType)
            {
                fKeyPress = TRUE;
                break;
            }
        }
    }

    return fKeyPress;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Nicht unterstützt
Zielplattform Windows
Kopfzeile winsatcominterfacei.h
DLL Winsatapi.dll

Weitere Informationen

IInitiateWinSATAssessment

IInitiateWinSATAssessment::InitiateFormalAssessment

IWinSATInitiateEvents