Redirect 从createprocessasuser将输出重定向到文件
我制作了一个windows服务,它从我提供的地址下载一个文件,然后执行Redirect 从createprocessasuser将输出重定向到文件,redirect,service,createprocessasuser,Redirect,Service,Createprocessasuser,我制作了一个windows服务,它从我提供的地址下载一个文件,然后执行 createprocessasuser函数,在我尝试将输出重定向到文件之前,一切都很好 我看到程序运行的新窗口中没有任何内容,但日志文件中也没有任何内容 这是我的密码: void exeAfterDownload(wchar_t *file){ SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInher
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运行),日志文件中没有任何内容。
有什么想法吗?您应该将CreateProcessAsUser的设置从FALSE设置为TRUE。
这是国旗。有人知道吗?