gpt4 book ai didi

c++ - GetStartupInfo() 根据启动应用程序的资源管理器而有所不同

转载 作者:行者123 更新时间:2023-11-28 01:03:55 25 4
gpt4 key购买 nike

我有一个 C++ 应用程序,它使用 CreateProcess() 启动另一个应用程序。我之前用 GetStartupInfo() 填充了 STARTUPINFO 数据。这是代码:

STARTUPINFOA si;
PROCESS_INFORMATION pi;

GetStartupInfoA( &si );

cout << si.dwFlags << endl;
cout << si.hStdError << endl;
cout << si.hStdInput << endl;
cout << si.hStdOutput << endl;

我使用 Win7/x64、SP1、VS2005、ICC 9.1(英特尔)

当我从 CubicExplorer 启动应用程序时,它返回:

dwFlags = 1

hStdError = 0xffffffffffffffff

hStdInput = 0xffffffffffffffff

hStdOutput = 0xffffffffffffffff

(...以及我使用此 STARTUPINFO 开始使用 CreateProcess 的第二个应用程序。)

当我从标准的 Windows Explorer 启动应用程序时,它返回:

dwFlags = 1025 (0x401)

hStdError = 0x0000000000000000

hStdInput = 0x0000000000000000

hStdOutput = 0x0000000000010001

(...并且 CreateProcess 因错误 ACCESS_DENIED 而失败。)

我的问题:因为唯一的区别是应用程序是从不同的文件夹资源管理器(Windows 资源管理器Cubic 资源管理器)启动的,什么可以产生这些不同的信息?

最佳答案

您收到的 STARTUPINFO 记录来自启动程序的 CreateProcess 调用。两个不同且完全独立的程序称为 CreateProcess,它们显然选择以不同方式填充 STARTUPINFO 记录。这没什么了不起的。

顺便说一下,除非 dwFlags 包含 STARTF_USETDHANDLES,否则读取 hStdX 字段是没有意义的。

我建议不要简单地将您自己的启动参数转发给下一个程序。相反,明确填充下一个程序所需的启动字段。这样,您就知道自己得到了什么。

关于c++ - GetStartupInfo() 根据启动应用程序的资源管理器而有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7362866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com