【问题标题】:redirect output to file from createprocessasuser从 createprocessasuser 将输出重定向到文件
【发布时间】:2015-09-13 22:48:34
【问题描述】:

我创建了一个 Windows 服务,它从我提供的地址下载文件,然后执行 createprocessasuser 函数,在我尝试将输出重定向到文件之前一切正常

我看到正在运行的程序的新窗口中没有任何内容,但日志文件中也没有任何内容..

这是我的代码:

void exeAfterDownload(wchar_t *file){

SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;

HANDLE h = CreateFile(_T("c:\\temp\\out.log"),
    FILE_APPEND_DATA,
    FILE_SHARE_WRITE | FILE_SHARE_READ,
    &sa,
    OPEN_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

BOOL ret = FALSE;
DWORD flags = CREATE_NO_WINDOW;

ZeroMemory(&pi2, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si2, sizeof(STARTUPINFO));
si2.cb = sizeof(STARTUPINFO);
si2.dwFlags |= STARTF_USESTDHANDLES;
si2.hStdInput = NULL;
si2.hStdError = h;
si2.hStdOutput = h;

sessionId2 = WTSGetActiveConsoleSessionId();

if (WTSQueryUserToken(sessionId2, &dummy2)) {
    if (!DuplicateTokenEx(dummy2, TOKEN_ALL_ACCESS, NULL, SecurityIdentification, TokenPrimary, &token2)) {
        CloseHandle(dummy2);
    }
    CloseHandle(dummy2);

    if (!CreateProcessAsUser(token2, L"c:\\temp\\run.exe", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si2, &pi2)) {  // The "new console" is necessary. Otherwise the process can hang our main process

        CloseHandle(token2);
    }
    CloseHandle(token2);
}
else{

}

}

当我在没有重定向的情况下运行它时,它工作正常,当我在不同的程序上运行此代码并使用 createprocess 它也适用于重定向,但是当我使用 createprocessasuser 时(因为它从win services) 日志文件中没有任何内容。 有什么想法吗?

【问题讨论】:

  • 有人知道吗?

标签: redirect service createprocessasuser


【解决方案1】:

您应该将 CreateProcessAsUser 的值从 FALSE 设置为 TRUE。 它是继承Handles 标志。

【讨论】:

    猜你喜欢
    • 2015-08-31
    • 2023-03-03
    • 2016-08-09
    • 2013-10-11
    • 2023-03-19
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多