问题标签 [createprocess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7465 浏览

c++ - 在调试器下运行时,AssignProcessToJobObject 失败并出现“拒绝访问”错误

你这样做AssignProcessToJobObject了,它会因“拒绝访问”而失败,但只有在你在调试器中运行时才会失败。为什么是这样?

0 投票
2 回答
5250 浏览

winapi - 如何让 CreateProcess/CreateProcessW 在路径中执行进程 > MAX_PATH 字符

我试图让 CreateProcess 或 CreateProcessW 执行名称 < MAX_PATH 字符但路径大于 MAX_PATH 字符的进程。根据以下文档:http://msdn.microsoft.com/en-us/library/ms682425.aspx,我需要确保 lpApplicationName 不为 NULL,然后 lpCommandLine 最多可以包含 32,768 个字符。

我试过了,但我得到了 ERROR_PATH_NOT_FOUND。

我更改为 CreateProcessW,但仍然出现相同的错误。当我在 lpApplicationName 前面加上 \\?\ 时,如中所述http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx在调用 CreateProcessW 时我得到一个不同的错误,让我觉得我更接近一点:ERROR_SXS_CANT_GEN_ACTCTX。

我对 CreateProcessW 的调用是:

CreateProcessW(w_argv0,arg_string,NULL,NULL,0,NULL,NULL,&si,&ipi);

w_argv0 在哪里\\?\<long absolute path>\foo.exe.

arg_string 包含 "<long absolute path>\foo.exe" foo

si 设置如下:

并且 pi 为空,如下所示:

我查看了系统事件日志,每次尝试使用事件 id 59 进行此操作时都会出现一个新条目,源 SideBySide: Generate Activation Context failed for .Manifest。参考错误信息:操作成功完成。

我尝试执行的文件在 < MAX_PATH 字符的路径中运行良好。

澄清一下, <long absolute path> 的任何一个组成部分都不大于 MAX_PATH 个字符。可执行文件本身的名称当然不是,即使最后有 .manifest。但是,整个路径加起来的长度大于 MAX_PATH 个字符。

无论我是否嵌入其清单,我都会收到相同的错误。清单被命名为 foo.exe.manifest,当它没有嵌入时,它与可执行文件位于同一目录中。它包含:

有谁知道如何让它工作?可能:

  • 调用 CreateProcess 或 CreateProcessW 以在路径 > MAX_PATH 字符中执行进程的其他方式

  • 我可以在清单文件中做的事情

我在 XP SP2 上使用 Visual Studio 2005 构建并运行本机。

谢谢你的帮助。

0 投票
3 回答
8846 浏览

delphi - Delphi - 优雅地关闭服务中创建的进程。(使用 tprocess / createProcess)

我有一个用 Delphi 编写的 Windows 服务,它运行许多程序。

在停止服务时,我还想关闭这些程序。最初编写服务时,它工作得很好,但我想我已经更新了 tProcess 组件,现在 - 下级程序没有被关闭。

在 tProcess - 这是启动新进程的代码。

此调用的每个可执行文件都是 Windows GUI 程序(顶部有一个关闭按钮)。

当我停止服务时,我还想停止(而不是杀死)我通过 createProcess 过程启动的程序。

你会怎么做?

0 投票
3 回答
915 浏览

c++ - 从服务启动进程

我正在尝试从服务启动另一个进程(它是一个控制台应用程序,它收集一些数据并将其写入注册表)但由于某种原因我无法让它正确启动。

我正在尝试做的基本情况如下:

  1. 启动进程
  2. 等待过程完成
  3. 从进程中检索返回码

我目前正在使用以下代码:

在调用 CreateProcess() 时,它成功并进入 if 语句的主体。对 WaitForSingleObject 的调用会立即返回,这是不应该的,因为该过程大约需要 20-30 秒才能完成。最后,调用 GetExitCodeProcess() 失败并且没有设置值“exit”。

仅供参考,这是我在其他地方成功使用过的代码,只是不在服务中。

难道是它是从服务启动的并且存在权限问题?

编辑: 我现在意识到它实际上会启动应用程序(我可以在 TaskMan 中看到它),但它似乎被卡住了。它在那里,但没有做任何事情。
根据 Rob Kennedy 的建议,我修复了进程句柄问题,它实际上确实在等待进程完成。但除非我手动杀死它,否则它永远不会完成。

0 投票
3 回答
3030 浏览

windows-server-2003 - 为什么 CreateProcess 在 Windows Server 2003 64 位中失败?

我们有一个 32 位应用程序,它在其过程中启动其他 32 位应用程序。该应用程序在其他 64 位平台上运行良好,但在 Windows Server 2003 64 位上,尝试启动应用程序时出现错误:

我们可以毫无问题地在该系统上手动启动这些应用程序。

我以为我们已经找到了这篇文章的问题,但是我们的客户已经在他的系统上安装了这个补丁,并且错误仍然存​​在。

如果其他人遇到过类似的事情,或者如果有人对如何解决这个问题有任何想法,将不胜感激!

谢谢!弗朗索瓦·科特

0 投票
4 回答
7174 浏览

windows - 使 CreateProcess 继承调用进程的控制台

当我在 Windows 中调用 CreateProcess 时,新进程似乎没有继承调用进程的控制台。我制作了一个运行“ruby xtest”的测试程序,xtest 是一个将“hello”写入标准输出的脚本。我从 Emacs 运行了这个测试程序,但没有得到任何输出。我还尝试了以下调用 GetStdHandle 的代码,但同样没有输出。然后我尝试将 dwCreationFlags 中的 CREATE_NEW_CONSOLE 传递给 CreateProcess,它使用 Ruby 输出创建了一个全新的窗口。最后,我做了一个简单的 fork/exec 测试程序,并使用 Cygwin 的 GCC 编译它。该程序有效:Ruby 输出按预期显示在 Emacs 中。我试图在http://cygwin.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/spawn.cc?rev=1.268&content-type=text/x-cvsweb-markup&中破译 Cygwin 源代码但失败了。那么,如何让新进程继承父进程的控制台,以使子进程的输出按预期显示?

0 投票
4 回答
4244 浏览

string - 我可以访问从 Delphi CreateProcess 命令返回的字符串吗?

我正在使用 Win32CreateProcess函数来执行对外部可执行文件的调用。可执行文件返回一个字符串。

有没有办法在调用可执行文件后捕获和询问返回的字符串?如果做不到这一点,我可能不得不将字符串写入可执行文件中的文件,并在调用完成后在调用程序中读取它。不过,这似乎很蹩脚。

0 投票
4 回答
7486 浏览

windows - CreateProcessWithLogonW() 问题 - 需要使用同一用户启动子进程

我有一个 Windows 可执行文件,它通过使用一组指定的用户详细信息调用 CreateProcessWithLogonW() 从服务中启动。

这可以正常工作,并且该过程按预期开始。然而,当这个进程试图自己启动其他进程时,目前只使用 CreateProcess() 这些启动然后立即死亡 - 它们是需要桌面访问的可执行文件。

在阅读了微软关于 CreateProcess() 的文章后 - http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx

我认为可以看出为什么会发生这种情况,并且在一定程度上是有道理的。CreateProcess() 知道调用进程正在模拟用户,因此它使用它的父进程,在本例中是本地系统帐户。但是当然,在本地系统帐户中运行的任何东西都没有我们需要的访问权限,因此启动的进程会死掉。

奇怪的是,当我之前使用 LogonUser() 和 CreateProcessAsUser() 在服务中启动初始可执行文件时,它运行良好。但是由于没有正确权限的问题,我不得不将其更改为 CreateProcessWithLogonW()。

有人知道解决这个问题吗?我在网上其他地方看到过关于这个的讨论,但没有任何明确的解决方案。似乎我可能需要我在 CreateProcessWithLogonW() 中登录的用户的令牌,以便以后可以使用它来启动其他进程?但是我无法获得这个令牌,可以以任何方式为当前用户检索它吗?

任何帮助将不胜感激,谢谢:)

0 投票
1 回答
1711 浏览

delphi - CreateProcess 和 WaitForSingleObject 在两个 PDF 文件中的第二个失败

全部

我在 Delphi 2007 中使用 CreateProcess 和 WaitForSingleObject 打开文件并等待它们被关闭。我发现当我连续打开两个 PDF 文件时,第二个 WaitForSingleObject 立即返回。我还发现 jpg 和 tif 文件会发生这种情况,但 txt 文件不会发生这种情况。此外,第二个 PDF 的打开时间比单独打开的时间长 10 秒!它也发生在 Vista 和 XP 以及一系列计算机上。我是在错误地使用 CreateProcess 还是其他原因?

任何帮助,将不胜感激。

问候

鲍勃

0 投票
3 回答
4994 浏览

c++ - 如何通过 C++ 启动 explorer.exe?

我正在尝试以编程方式启动 explorer.exe,但我没有任何运气。

这是我的代码:

pName 是 explorer.exe

有人可以告诉我我做错了什么吗?我收到错误代码“2”,即ERROR_FILE_NOT_FOUND