我正在尝试以编程方式启动explorer.exe,但我没有运气.
这是我的代码:
cout << pName << "died, lets restart it." << endl;
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
if(CreateProcess(pName, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &processInformation) == 0){
cout << "Error starting " << pName << ": " << GetLastError() << endl;
}
Run Code Online (Sandbox Code Playgroud)
和pName是explorer.exe
有人能告诉我我做错了什么吗?我得到错误代码'2'ERROR_FILE_NOT_FOUND
我在php中运行以下内容:
$res = proc_open($cmd, $descriptorspec, $pipes, "C:\\xampp\htdocs\\",null,array('bypass_shell'=>true));
Run Code Online (Sandbox Code Playgroud)
问题是它给出了以下错误:
Warning: proc_open(): CreateProcess failed, error code - 3
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找出错误的含义?
PS:它在Windows Server 2007. SP2上.用户是管理员,完全访问.PHP是5.3.1版
我正在使用CreateProcess API从我的应用程序启动一个进程,我希望将新进程的窗口置于顶部.有办法吗?我们在CreateProcess中有任何标志或类似的东西吗?
我想知道sysinternals的psexec.exe如何作为SYSTEM用户执行进程.我需要在SYSTEM进程下运行一个工具,但如果不将其注册为服务,我真的不知道该怎么做.
有没有人有想法?
ps我真的更喜欢使用WINAPI(C++).谢谢!:-)
谢谢!
我注意到在我的应用程序中,CreateProcessWithTokenW有时会在返回之前阻塞很长时间(最多20秒).阻止我的主线程这么久是不可接受的,所以我正在考虑将调用移到后台线程上.但是,我想知道是否有更好的,内置的方式来执行异步CreateProcess,可能使用重叠操作等.有谁知道这样的事情是否存在?
我正在阅读c ++中的CreateProcess函数,我想尝试一下.代码的基本思想是让我的主要执行另一个进程(记事本).真的,这只是基本代码.当我运行程序时,我得到:
createprocess.exe中0x752bb763处的第一次机会异常:0xC0000005:访问冲突写入位置0x00be57b8.
createprocess.exe中0x752bb763处的未处理异常:0xC0000005:访问冲突写入位置0x00be57b8.
当我为发生错误的位置设置一个断点时,我会被带到tidtable.c(我想这是用于访问线程).特别是在tidtable.c中 CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue()
我真的不知道是什么或如何避免这个问题.CreateProcess调用发生错误(即,它永远不会输出"out of create").
我的代码是:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <strsafe.h>
#include <direct.h>
#include <string.h>
#include <conio.h>
int main(VOID)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
//allocate memory
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
fprintf(stderr, "This is just a test");
//create child process
if (!CreateProcess(NULL,
L"C:\\Windows\\Notepad.exe",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi))
{
fprintf(stderr, "create process failed");
return -1;
}
fprintf(stderr, "out of create");
//parent waits for child to …
Run Code Online (Sandbox Code Playgroud) c++ winapi createprocess unhandled-exception access-violation
我正在使用CreateProcess
启动交互式脚本解释器,并希望透明地将stdin/stdout/stderr转发给解释器.
我的第一次尝试是设置STARTUPINFO
传递给CreateProcess
喜欢的结构
STARTUPINFOA si = { sizeof( si ) };
si.hStdError = ::GetStdHandle( STD_ERROR_HANDLE );
si.hStdOutput = ::GetStdHandle( STD_OUTPUT_HANDLE );
si.hStdInput = ::GetStdHandle( STD_INPUT_HANDLE );
si.dwFlags |= STARTF_USESTDHANDLES;
Run Code Online (Sandbox Code Playgroud)
即我试图让脚本解释器进程使用与我的启动程序进程使用的读/写相同的句柄.这似乎不起作用(我甚至不确定那些标准句柄是否可以继承).
基于创建具有重定向输入和输出的子进程示例的第二个想法是设置三个管道以转发写入任何管道的所有数据.由于我不知道如何等待数据写入多个文件(WaitForMultipleObjects
无法在管道上同步),我考虑有三个线程,每个线程ReadFile
在管道上进行阻塞调用.
我怀疑这可能有点矫枉过正,所以我想知道:有更简单的方法吗?我根本不需要对从脚本解释器传递的数据进行任何处理.
作为旁注,在Linux上我只是用execvp
脚本解释器进程替换当前进程,但在Windows上我需要启动脚本解释器,主线程处于挂起状态(这样我就可以进行一些字节码修补) - 所以即使因为_execvp似乎可以在Windows上使用,我显然必须使用CreateProcess.
我需要启动一个进程并将其作为独立进程运行。我有某种入门应用程序,目的是运行另一个exe并立即退出。实现这一目标的最佳方法是什么?
我CreateProcess
多次阅读文档,但仍然有疑问。文档说CloseHandle
我完成后需要打电话。但是我的父母的应用程序不应该等待孩子退出。文档的另一部分说,我可以不理会句柄-当父进程终止时,系统将关闭它们。这是否意味着子应用程序在父项之后立即退出?似乎不正确-我关闭了启动器,但子进程仍然运行。
DETACHED_PROCESS
似乎我在寻找一个标志。但是文档说明了一些有关控制台的内容。什么控制台?我不在乎控制台。
我目前潜入的Win32 API,写我自己的包装类CreateProcess
和CreatePipe
。我只是想知道如果我打开的进程为管道缓冲区写入过多的输出会发生什么。该过程会等到我从管道的另一端读取吗?该CreatePipe
函数的备注表明:
当进程使用 WriteFile 写入匿名管道时,直到写入所有字节后,写入操作才会完成。如果在写入所有字节之前管道缓冲区已满,则 WriteFile 不会返回,直到另一个进程或线程使用 ReadFile 来提供更多可用缓冲区空间。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365152%28v=vs.85%29.aspx
让我们假设我打开一个进程CreateProcess
,然后使用WaitForSingleObject
等待进程退出。如果进程超过其标准输出管道的缓冲区大小,它会退出吗?
我需要创建一个变量来使用CreateProcess
:
CreateProcess(z7Cmdline, z7Arg, NULL, NULL, FALSE, NULL, NULL, NULL, &startInfo, &processInfo);
Run Code Online (Sandbox Code Playgroud)
变量z7Arg是7 -zip的参数列表,其中包含基于当前日期的文件名,即:2017-12-13.zip.
string buArg = "-o""c:\\moshe"" a " + buDir + buFileName + "c:\\moshe\\*.pdf";
Run Code Online (Sandbox Code Playgroud)
我想将buArg复制到z7Arg作为LPTSTR,以便在CreateProcess例程中使用
我该怎么办呢?
我是C++编码的新手,30年前我使用IBM Fortran和汇编语言为Grumman Aerospace编写程序,但从那以后我做了很少的编码.