如何在c ++中创建任务?

时间:2016-09-09 21:47:09

标签: c++ winapi scheduled-tasks

我想创建一个c ++程序,它可以绕过UAC对话框重新启动自身或其他具有高权限的程序。

1 个答案:

答案 0 :(得分:2)

如果你想在Windows系统目录中找到notepad.exe,我建议你直接这样做:

#include <string.h>
#include <windows.h>

int main() { 
    char path[_MAX_PATH];

    GetSystemDirectory(path, sizeof(path));

    strcat_s(path, "/notepad.exe");

    WinExec(path, SW_SHOWNORMAL);
}

要在指定的用户帐户下执行结果,您通常希望使用CreateProcessWithLogonW(有一些替代方案,例如CreateProcessAsUserCreateProcessWithTokenW,但CreateProcessWithLogonW是通常是喜欢的。)

这使用宽字符,因此最简单的方法是使用宽字符,如下所示:

#include <string.h>
#include <windows.h>

template <size_t N>
DWORD GetSystemDirectory(wchar_t (&buffer)[N]) {
    return GetSystemDirectoryW(buffer, N);
}

template <size_t N>
void append(wchar_t (&buffer)[N], wchar_t const *src) {
    wcscat_s(buffer, N, src);
}

int main() { 
    wchar_t path[_MAX_PATH];

    GetSystemDirectory(path);

    append(path, L"/Notepad.exe");

    PROCESS_INFORMATION pi;
    CreateProcessWithLogonW(L"Username", L"machine_name", L"password", 0, path, NULL, CREATE_NEW_CONSOLE, NULL, NULL, NULL, &pi);
}