getApplicationRestartSettings 函数 (winbase.h)

检索为指定进程注册的重启信息。

语法

HRESULT GetApplicationRestartSettings(
  [in]            HANDLE hProcess,
  [out, optional] PWSTR  pwzCommandline,
  [in, out]       PDWORD pcchSize,
  [out, optional] PDWORD pdwFlags
);

参数

[in] hProcess

进程的句柄。 此句柄必须具有PROCESS_VM_READ访问权限。

[out, optional] pwzCommandline

指向缓冲区的指针,该缓冲区接收应用程序在调用 RegisterApplicationRestart 函数时指定的重启命令行。 命令行的最大大小(以字符为单位)RESTART_MAX_CMD_LINE。 如果 pcchSize 为零,可以为 NULL

[in, out] pcchSize

输入时,指定 pwzCommandLine 缓冲区的大小(以字符为单位)。

如果缓冲区不够大,无法接收命令行,则函数将失败并HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER) 并将此参数设置为所需的缓冲区大小(以字符为单位)。

在输出中,指定所使用的缓冲区的大小。

若要确定所需的缓冲区大小,请将 pwzCommandLine 设置为 NULL ,并将此参数设置为零。 大小包括 一个 null 终止符字符。 请注意,此函数返回S_OK,在本例中不返回HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER) 。

[out, optional] pdwFlags

指向变量的指针,该变量接收应用程序在调用 RegisterApplicationRestart 函数时指定的标志。

返回值

此函数在成功 时返回S_OK 或以下错误代码之一。

返回代码 说明
E_INVALIDARG
一个或多个参数无效。
HRESULT_FROM_WIN32 (ERROR_NOT_FOUND)
应用程序未注册重启。
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
pwzCommandLine 缓冲区太小。 函数返回 pcchSize 中所需的缓冲区大小。 使用所需的大小重新分配缓冲区。

注解

此信息仅适用于当前进程;重启程序以获取重启命令行后,无法调用此函数。 若要在重启后获取命令行,请访问 main 函数的 argv 参数。

示例

以下示例演示如何获取调用 RegisterApplicationRestart 函数时指定的重启设置。

#include <windows.h>
#include <stdio.h>


void wmain(int argc, WCHAR* argv[])
{
    HRESULT hr = S_OK;
    WCHAR wsCommandLine[RESTART_MAX_CMD_LINE + 1];
    DWORD cchCmdLine = sizeof(wsCommandLine) / sizeof(WCHAR);
    DWORD dwFlags = 0;
    LPWSTR pwsCmdLine = NULL;
    UNREFERENCED_PARAMETER(argv);
    UNREFERENCED_PARAMETER(argc);

    wprintf(L"Registering for restart...\n");
    hr = RegisterApplicationRestart(L"/restart -f .\\filename.ext", 0);
    if (FAILED(hr))
    {
        wprintf(L"RegisterApplicationRestart failed, 0x%x\n", hr);
        goto cleanup;
    }

    wprintf(L"Get restart command line using static buffer...\n");
    hr = GetApplicationRestartSettings(GetCurrentProcess(), wsCommandLine, &cchCmdLine, &dwFlags);
    if (FAILED(hr))
    {
        wprintf(L"GetApplicationRestartSettings failed, 0x%x\n", hr);
        goto cleanup;
    }

    wprintf(L"Command line: %s\n", wsCommandLine);

    wprintf(L"\nGet settings using dynamic buffer...\n");

    cchCmdLine = 0;

    // Returns S_OK instead of ERROR_INSUFFICIENT_BUFFER when pBuffer is NULL and size is 0.
    hr = GetApplicationRestartSettings(GetCurrentProcess(), (PWSTR)pwsCmdLine, &cchCmdLine, &dwFlags);
    if (SUCCEEDED(hr))
    {
        pwsCmdLine = (LPWSTR)malloc(cchCmdLine * sizeof(WCHAR));

        if (pwsCmdLine)
        {
            hr = GetApplicationRestartSettings(GetCurrentProcess(), (PWSTR)pwsCmdLine, &cchCmdLine, &dwFlags);
            if (FAILED(hr))
            {
                wprintf(L"GetApplicationRestartSettings failed with 0x%x\n", hr);
                goto cleanup;
            }

            wprintf(L"Command line: %s\n", pwsCmdLine);
        }
        else
        {
            wprintf(L"Allocating the command-line buffer failed.\n");
        }
    }
    else
    {
        if (hr != HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) // Not a restart.
        {
            wprintf(L"GetApplicationRestartSettings failed with 0x%x\n", hr);
            goto cleanup;
        }
    }

cleanup:

    if (pwsCmdLine)
        free(pwsCmdLine);
}

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

RegisterApplicationRestart