标签: createprocess

从 PowerShell 调用 CreateProcess

我正在尝试从 PowerShell 调用CreateProcess。API 调用表明它已成功,但任务管理器中看不到新的应用程序或进程。

Add-Type -TypeDefinition @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct PROCESS_INFORMATION
{
    public IntPtr hProcess;
    public IntPtr hThread;
    public uint dwProcessId;
    public uint dwThreadId;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct STARTUPINFO
{
    public uint cb;
    public string lpReserved;
    public string lpDesktop;
    public string lpTitle;
    public uint dwX;
    public uint dwY;
    public uint dwXSize;
    public uint dwYSize;
    public uint dwXCountChars;
    public uint dwYCountChars;
    public uint dwFillAttribute;
    public STARTF dwFlags;
    public ShowWindow wShowWindow; …
Run Code Online (Sandbox Code Playgroud)

powershell createprocess

4
推荐指数
1
解决办法
5326
查看次数

如何用 C 语言向子进程传递输入并检索输出

我在 Windows 中有一个 exe 程序,它在终端中的工作原理如下

> program.exe parameter01 file
entry01 (user types entry01)
output01
entry02 (user types entry02)
output02
...
until the combination Ctrl+D is pressed.
Run Code Online (Sandbox Code Playgroud)

我需要用 C 语言创建一个“子进程”,它能够运行程序并将条目发送到“子进程”并接收 char[] 或字符串形式的输出。

我知道我必须使用CreateProcess 方法,但我不知道如何传递输入等条目并检索输出,我该怎么做?

我已经使用 Java看到了这个,但我需要用 C 语言实现这个功能。

c createprocess child-process

4
推荐指数
1
解决办法
9406
查看次数

如何防止产生子进程产生的进程?

我的Windows XP/7程序使用Windows API CreateProcess()函数作为其操作的一部分启动子进程.我希望能够以一种特定方式"沙箱化"应用程序.我不想让子进程生成自己的进程(孙子进程).有没有办法做到这一点,而无需进行任何挂钩或DLL注入(或IAT修补)?

我在Process Security和Access Rights上看到了这个MSDN页面:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684880(v=vs.85).aspx

我注意到以下特定于进程的访问权限:

PROCESS_CREATE_PROCESS (0x0080) Required to create a process.
Run Code Online (Sandbox Code Playgroud)

我可以在挂起状态下启动子进程,通过XOR操作删除该访问权限,使用SetSecurityDescriptor()更新子进程的访问权限,并恢复它以防止它创建自己的子进程吗?或者我应该将它应用于磁盘上的EXE文件吗?这会有用吗?

如果是这样,我会很感激使用SetSecurityDescriptor()的一个很好的代码示例,它会告诉我这样做的细微差别.如果这种方法不起作用,那么您可能会有任何想法或提示.

winapi process createprocess access-control dacl

3
推荐指数
1
解决办法
933
查看次数

通过CreateProcess启动时,cl.exe似乎没有写入权限

我正在调用CreateProcess来启动cl.exe(Win7 64位上的VS2010).我收到以下错误..

cl:命令行错误D8037:无法创建临时il文件; 清除旧的il文件的临时目录

在cmd窗口中使用相同的环境变量调用相同的命令行会成功.我检查了临时目录,没有旧文件.看起来创建的进程没有写权限.我一直在尝试不同的方法.. CreateProcessAsUser,设置安全属性以授予Everyone用户组的所有标准权限,包括和不包含继承句柄等.它们似乎都没有解决它.

这是基本代码......

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

const char* _szSourceFile = "c:\\temp\\test\\src\\foo.cpp";

char szOptions[ 2048 ];
sprintf_s( szOptions, 
    "c:\\temp\\compile\\cl.exe "
    "/Gd "
    "/Fo\"c:\\temp\\test\\out\\\" "
    "/Fe\"c:\\temp\\test\\out\\\" "
    "/Fd\"c:\\temp\\test\\out\\\" "
    "/D \"WIN32\" "
    "/D \"_DEBUG\" "
    "/D \"_WINDOWS\" "
    "/D \"_USRDLL\" "
    "/D \"_WINDLL\" "
    "/D \"_MBCS\" "
    "/I\"c:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Include\" "
    "/MDd "
    "/I\"c:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\include\" "
    "/LDd "
    "%s "
    "c:\\temp\\test\\lib\\Uuid.Lib "
    "c:\\temp\\test\\lib\\oldnames.lib …
Run Code Online (Sandbox Code Playgroud)

c permissions createprocess cl.exe

3
推荐指数
1
解决办法
2953
查看次数

CreateProcess不会在Windows 7下创建其他控制台窗口?

我正在尝试使用CreateProcess(...)运行一个进程,并在一个单独的控制台窗口中独立运行它.

我可以使用系统("...")函数实现这一点,但我更喜欢CreateProcess,因为它让我可以指定环境和工作目录,获取进程的句柄,以及在需要时管道stdin/out至.

我在互联网上找到的只是反问题,即人们有额外的控制台窗口,想要摆脱它们!在早期版本的Windows中打开并显示新的控制台窗口似乎是正常的行为?

现在,即使我运行"cmd.exe/c ...",我也无法获得额外的窗口.

我尝试使用STARTF_USESHOWWINDOW标志没有运气.

有谁有这个问题?

PS:例如,GUI窗口显示.notepad.exe将正常显示.

这是我的代码(实质上)

PROCESS_INFORMATION processInfo;
STARTUPINFOA startupInfo;
ZeroMemory(&startupInfo,sizeof(startupInfo));
startupInfo.dwFlags |= CREATE_NEW_CONSOLE;
startupInfo.dwFlags |= DETACHED_PROCESS;
ok&=CreateProcessA( NULL,
    const_cast<char*>(comand.c_str()), // safe for CreateProcessA
    NULL, NULL, TRUE, NULL, NULL, NULL,
    &startupInfo, &processInfo);
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行C:/Windows/system32/cmd.exe/c help程序运行,我可以读取管道的输出.仍然没有窗口.

winapi createprocess windows-console

3
推荐指数
1
解决办法
7499
查看次数

如何将std :: string环境块传递给CreateProcess?

我目前正在尝试将CreateProcess与Path,Arguments和Environment Variables一起使用.我的变量存储在字符串中.

在下面的示例中,filePath和cmdArgs工作正常,但我无法使envVars工作.

std::string filePath = "C:\\test\\DummyApp.exe";
std::string cmdArgs  = "Arg1 Arg2 Arg3";
std::string envVars  = "first=test\0second=jam\0";  // One

//LPTSTR testStr = "first=test\0second=jam\0";      // Two

CreateProcess(
   LPTSTR(filePath.c_str()),           //path and application name
   LPTSTR(cmdArgs.c_str()),            // Command line
   NULL,                               // Process handle not inheritable
   NULL,                               // Thread handle not inheritable
   TRUE,                               // Set handle inheritance
   0,                                  // Creation flags
   LPTSTR(envVars.c_str()),            // environment block
   //testStr                      //this line works
   NULL,                               // Use parent's starting directory 
   &si,                                // Pointer to STARTUPINFO structure
   &pi ) …
Run Code Online (Sandbox Code Playgroud)

c++ windows createprocess

3
推荐指数
1
解决办法
2442
查看次数

Haskell createProcess和Handle读取

当我使用Haskell createProcess时,我需要fork之前好像我在c中使用exec吗?

从我已经看到的示例和我已经尝试的我不认为我做但如果我从输出句柄读取一旦我得到预期的结果但如果我尝试阅读两次它甚至不读一次.

例如:

beginProcess与createProcess相同,z3是从stdin读取并写入stdout的smt解算器.

execute :: Process -> String -> IO String
execute (Just std_in, Just std_out,_,_) cmd = do
  hPutStr std_in cmd 
  hFlush std_in
  hGetLine std_out

main :: IO()
main = do 
  proc <- beginProcess "z3" ["-smt2","-in"]
  execute proc "(set-option :print-success true)" >>= print
  execute proc "(set-option :print-success true)" >>= print 
Run Code Online (Sandbox Code Playgroud)

如果我执行一个我得到预期的结果,但如果我这样做都没有任何反应.我在读取或写错了句柄吗?

感谢您提供任何帮助.

haskell createprocess handle smt

3
推荐指数
1
解决办法
900
查看次数

如何在没有P/Invoke的情况下从c#创建挂起的进程?

WinAPI CreateProcess具有标志CREATE_SUSPENDED,因此可以在完成某些操作之前将进程附加到JobObject,然后为其主线程调用ResumeThread.我找到的唯一一个寻找解决方案的是11年前写的这篇文章!

c# pinvoke process createprocess suspend

3
推荐指数
1
解决办法
1447
查看次数

如何使用windbg调试子进程和父进程?

我有一个程序使用CreateProcess函数创建子进程.在调试时,我通过childdbg 1进入子进程.但是在执行完整的子进程步骤之后.它不会返回到父进程.

当我使用.childdbg 1时

0:000> .childdbg 1
将调试当前进程创建的进程

然后我用2次g,第一次,它加载模块,来到,低于位置,

0:000> g

.
.
.

1:002>

第二次,它再次加载了一些其他模块,并且到了下面的位置,

1:002> g

.
.
.

2:005>

从这一点开始,我将开始调试我的子进程.它的工作性很好.之后,运行子进程,直接执行它的父进程.那么,任何人都可以给我调试命令或命令从第二个进程到第一个进程.请,我需要调试级解决方案.不是我的代码.

debugging command windbg createprocess child-process

3
推荐指数
1
解决办法
4397
查看次数

C++ CreateProcess无法从Windows 7上的套接字接收路径(64)

我正在尝试使用CreateProcess()函数创建一个简单的应用程序控制器.程序接收程序的te路径,该路径将由套接字执行并将其存储到char []变量中,稍后它将变量发送给将执行它的函数.

我得到的错误是

Client: Received data is: C:\Windows\System32\calc.exe
Server: Bytes received: 30.
CreateProcess failed (123).
Run Code Online (Sandbox Code Playgroud)

(2)= ERROR_FILE_NOT_FOUND

我尝试使用doble slash(//)并收到错误(123)

Client: Received data is: C:\\Windows\\System32\\calc.exe
Server: Bytes received: 33.
CreateProcess failed (123).
Run Code Online (Sandbox Code Playgroud)

(123)= ERROR_INVALID_NAME

接收程序执行路径的函数:

bytesRecv = recv(m_socket, recvbuf, 200, 0);

if (bytesRecv == SOCKET_ERROR)
   printf("Server: recv() error %ld.\n", WSAGetLastError());
else
{
   printf("\nClient: Received data is: %s\n", recvbuf);
   printf("Server: Bytes received: %ld.\n", bytesRecv );
   NewProcess(1,LPWSTR(recvbuf)); // <---- Call to NewProcess function with path
}
Run Code Online (Sandbox Code Playgroud)

和启动过程的功能:

void NewProcess(int count,LPWSTR cmd)
{
    LPTSTR …
Run Code Online (Sandbox Code Playgroud)

c++ sockets windows createprocess

3
推荐指数
1
解决办法
977
查看次数