TL; DR:用於Windows的可執行包裝的CreateProcess用法?
CreateProcess(?, ?, ?, ...)
爲:
- 通電流過程PARAMS(即"batchfile"
%*
) - 正確連接stdin和stdout
- 創建旗幟?
我有以下問題:
- 我需要啓動一個給定的第三方可執行文件與自定義環境和自定義參數。 (兩個半固定)
- 我不能用一個批處理文件,因爲(再次,第三方)側調用模塊直接調用
CreateProcess
- 我需要通過傳遞
因此,任何額外的paramers ,我想要做的就是創建一個非常簡單的可執行啓動程序會像一個批處理文件,相當於:
set PATH=...
set WHATEVER=...
...\3rd-pty-tool.exe -switch1 -switch2 %*
exit /B %ERRORLEVEL%
而且,我不想惹any bat2exe converter東西 - 太醜陋當我有任何Visual Studio唉。
運行的另一個executable via CreateProcess
is trivial原則:
STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;
if (CreateProcess(?, ?, ?, ?, ?, ?, ?, ?, &info, &processInfo))
{
WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
通過_putenv
等建立子進程的環境。也很容易。然而
什麼是不平凡的我是什麼傳授給CreateProcess
:
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCTSTR lpCurrentDirectory,
_In_ LPSTARTUPINFO lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);
- 如何我在
%*
相當於當前Win32進程得到什麼? - 只通過
lpApplicationName
,只有lpCommandLine
或兩者兼而有之? - 如何處理繼承和創建標誌?
- 如何正確地轉發/返回stdin和stdout?
不是欺騙:CreateProcess to execute Windows command
我不知道'%*'的意思,但是您可能正在尋找[GetCommandLine](https://msdn.microsoft.com/en-us/library/windows/desktop/ms683156.aspx) –
另外感興趣的是:[使用重定向輸入和輸出創建子進程](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499.aspx) –
@Igor'%*'如同在批處理文件。感謝,這個重定向文章是一個很好的。 –