天道酬勤,学无止境

createprocess

如何使用win32 CreateProcess函数等到孩子完成写入文件(How to use win32 CreateProcess function to wait until the child done to write to file)

问题 你好我不是win32程序员,对我来说都是新的。 我喜欢从我的父 win32 应用程序打开进程(好吧,我知道该怎么做)子进程然后写入文本文件并自行关闭它。 我如何在父应用程序中检测到子应用程序已完成写入文本文件。 然后从父应用读取文本文件。 这都是在win32 c++中谢谢 回答1 PROCESS_INFORMATION 结构(它是 CreateProcess 的最后一个参数)包含成员hProcess 。 这是新进程的句柄,您可以使用WaitForSingleObject等待。 回答2 对 Benoits 的回答稍作修改。 您可以在父进程中创建一个事件并使用WaitForSingleObject等待该事件。 然后,孩子可以通过调用SetEvent来发出此事件的信号。 http://msdn.microsoft.com/en-us/library/ms686211%28v=vs.85%29.aspx 重要的是子进程将继承所有可继承的句柄,因此 CreateProcess 必须将第五个参数设置为 true (bInheritHandles)。 这样子进程就不必退出来检查文件是否已写入。 回答3 如果您的孩子将在文件创建后退出,您可以使用::CreateProcess返回的进程句柄使用::WaitForSingleObject 。

2022-01-16 08:22:12    分类:技术分享    c++   winapi   createprocess

错误 C3861:“_tcsdup”:找不到标识符(error C3861: '_tcsdup': identifier not found)

问题 这是我第一次,我想使用 windows CreateProcess 函数创建一个并行进程。 基于 MSDN 上的示例,我创建了一个 LPTSTR“(非常量)TCHAR 字符串”命令行参数,如下所示 LPTSTR szCmdline[] = _tcsdup(TEXT("\C:\\MyProgram_linux_1.1\\MyProgram.exe") ); LPTSTR 和其他字符和字符串类型在这里讨论 命令行参数像这样传递给CreateProcess if (!CreateProcess(NULL, szCmdline, /*...*/) ) cout << "ERROR: cannot start CreateProcess" << endl; 并且这些标题存在 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <strsafe.h> #include <direct.h> 编译时出现以下错误: error C3861: '_tcsdup': identifier not found 对此错误的搜索发现了相同的错误,但该解决方案特定于使用 .NET 框架,而不是解释error C3861: '_tcsdup' 不确定它是否相关但也有一个error C2059: syntax error

2022-01-15 10:47:38    分类:技术分享    c++   visual-studio-2008   fork   createprocess   lptstr

error C3861: '_tcsdup': identifier not found

This is my first time and I'd like to make a parallel process using the windows CreateProcess function. Based on the example at MSDN I created a LPTSTR "(non-const) TCHAR string" command line argument like this LPTSTR szCmdline[] = _tcsdup(TEXT("\C:\\MyProgram_linux_1.1\\MyProgram.exe") ); The LPTSTR and other char and string types are discussed here The command line argument is passed to CreateProcess like this if (!CreateProcess(NULL, szCmdline, /*...*/) ) cout << "ERROR: cannot start CreateProcess" << endl; And these headers are present #include <stdio.h> #include <stdlib.h> #include

2022-01-15 08:31:41    分类:问答    c++   visual-studio-2008   fork   createprocess   lptstr

NtCreateProcess 和 ZwCreateProcess 有什么区别?(What is the difference between NtCreateProcess and ZwCreateProcess?)

问题 NtCreateProcess和ZwCreateProcess有什么区别? 在 ntdll.dll 中, NtCreateProcess和ZwCreateProcess都指向完全相同的地址 回答1 在用户模式下,Nt 和 Zw API 组是相同的。 在内核模式下,它们是不同的。 Nt API 包含实际的实现。 Zw API 使用系统调用机制并确保它在内核模式下调用,并且如果参数包含用户模式地址,则无需检查参数。 否则,您可以在用户模式下使用带有内核参数的 API,这并不好。 所以它只是一个安全机制。 回答2 除了已经给出的答案(我不想鹦鹉学舌)之外,我认为最好的答案可以在 OSR Online 上找到:这里。 或者,您可以阅读有关 Native API 的书籍,例如 Gary Nebbett 的一本名为“Windows NT/2000 Native API Reference”的书籍,他在这个问题上花了一些篇幅,或者您可以使用 WinDbg(发音为“wind-bag” ) 你自己。

2022-01-15 08:03:41    分类:技术分享    windows   winapi   createprocess   kernel-mode   ntdll

What is the difference between NtCreateProcess and ZwCreateProcess?

What is the difference between NtCreateProcess and ZwCreateProcess? In ntdll.dll, both NtCreateProcess and ZwCreateProcess point to exactly the same address

2022-01-15 04:40:41    分类:问答    windows   winapi   createprocess   kernel-mode   ntdll

我如何在winXP中创建一个隐藏进程窗口(从任务栏)的进程? 使用 CreateProcess 函数?(How could i Create a process with hiding the process window (from the task bar) in winXP? with CreateProcess function?)

问题 /* CreateProcess initialization */ STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); long ret; // si.wShowWindow = SW_HIDE; // hide process window.... // run in background.. si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; if (!CreateProcess(0, exe, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)) { return; } //int prez = WaitForSingleObject(pi.hProcess, INFINITE); //CloseHandle(pi.hProcess); 回答1 您可以尝试将 STARTUPINFO 结构的dwFlags成员设置为STARTF_USESHOWWINDOW并将wShowWindow成员设置为SW_HIDE 。 这将使CreateProcess()将 0 作为 WinMain

2022-01-15 04:25:47    分类:技术分享    c++   winapi   c++builder   createprocess

How could i Create a process with hiding the process window (from the task bar) in winXP? with CreateProcess function?

/* CreateProcess initialization */ STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(si)); memset(&pi, 0, sizeof(pi)); si.cb = sizeof(si); long ret; // si.wShowWindow = SW_HIDE; // hide process window.... // run in background.. si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; if (!CreateProcess(0, exe, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi)) { return; } //int prez = WaitForSingleObject(pi.hProcess, INFINITE); //CloseHandle(pi.hProcess);

2022-01-14 15:47:13    分类:问答    c++   winapi   c++builder   createprocess

CreateProcess 执行 Windows 命令(CreateProcess to execute Windows command)

问题 我正在尝试使用 CreateProcess 函数执行 dos 命令: LPWSTR cmd=(LPWSTR)QString("C:\\windows\\system32\\cmd.exe subst " + DLetter+" \""+mountPath+"\"").utf16(); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); if ( CreateProcessW(0, // Application name cmd, // Application arguments NULL, NULL, TRUE, 0, NULL, L"C:\\windows\\system32", // Working directory &si, &pi) == TRUE) { ... 它给出了最后一个错误 3 = ERROR_PATH_NOT_FOUND,当我将应用程序路径"C:\\windows\\system32\\cmd.exe"与命令分开时,它显示控制台而不执行我的 subst 命令。 任何帮助将不胜感激。 回答1 您需要在cmd.exe的选项中包含 /C 或 /K 。 /C Carries

2022-01-11 15:36:19    分类:技术分享    windows   winapi   cmd   createprocess

“错误”的应用程序被固定到任务栏(Windows 7)("Wrong" app gets pinned to taskbar (Windows 7))

问题 我有一个通过快捷方式启动的应用程序。 此应用程序使用 CreateProcess() 启动 Java GUI 应用程序。 当 Java 应用程序被固定到任务栏时,javaw.exe 被固定到任务栏而不是“预期的”快捷方式。 只能修改启动 Java 的本机可执行文件 - 快捷方式必须保留。 必须做什么才能固定快捷方式? 谢谢,斯特凡 回答1 使用 winrun4j 之类的东西或创建一个 .bat 而不是使用快捷方式。 回答2 有一个 Java 库为 Java 提供了新的 Windows 7 功能。 它被 Strix Code 称为 J7Goodies。 使用它的应用程序可以正确固定到 Windows 7 任务栏。 您还可以创建自己的跳转列表等。 回答3 你可以像这样清理你的IconCache : 首先进入任务管理器并杀死explorer.exe Windows Task Management -> Processes -> End "explorer.exe" 然后,在任务管理 Windows Task Management -> File -> New -> CMD.EXE 在打开的控制台类型中: CD /d %userprofile%\AppData\Local DEL IconCache.db /a EXIT 然后重新打开explorer.exe Windows Task

2022-01-11 13:43:09    分类:技术分享    java   windows-7   taskbar   shortcut   createprocess

"Wrong" app gets pinned to taskbar (Windows 7)

I have an application that gets started via a shortcut. This application than starts a Java GUI application with CreateProcess(). When the Java application gets pinned to the taskbar the javaw.exe gets pinned to the taskbar instead of the "expected" shortcut. Only the native executable which launches Java can be modified - the shortcut has to stay. What has to be done so that the shortcut gets pinned? Thanks, Stefan

2022-01-10 05:39:59    分类:问答    java   windows-7   taskbar   shortcut   createprocess