mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 17:15:00 -06:00
103 lines
2.0 KiB
C++
Executable File
103 lines
2.0 KiB
C++
Executable File
// ProcessUtils.cpp
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "../Common/StringConvert.h"
|
|
|
|
#include "ProcessUtils.h"
|
|
|
|
#ifndef _UNICODE
|
|
extern bool g_IsNT;
|
|
#endif
|
|
|
|
namespace NWindows {
|
|
|
|
#ifndef UNDER_CE
|
|
static UString GetQuotedString(const UString &s)
|
|
{
|
|
UString s2 ('\"');
|
|
s2 += s;
|
|
s2 += '\"';
|
|
return s2;
|
|
}
|
|
#endif
|
|
|
|
WRes CProcess::Create(LPCWSTR imageName, const UString ¶ms, LPCWSTR curDir)
|
|
{
|
|
/*
|
|
OutputDebugStringW(L"CProcess::Create");
|
|
OutputDebugStringW(imageName);
|
|
if (params)
|
|
{
|
|
OutputDebugStringW(L"params:");
|
|
OutputDebugStringW(params);
|
|
}
|
|
if (curDir)
|
|
{
|
|
OutputDebugStringW(L"cur dir:");
|
|
OutputDebugStringW(curDir);
|
|
}
|
|
*/
|
|
|
|
Close();
|
|
const UString params2 =
|
|
#ifndef UNDER_CE
|
|
GetQuotedString(imageName) + L' ' +
|
|
#endif
|
|
params;
|
|
#ifdef UNDER_CE
|
|
curDir = NULL;
|
|
#else
|
|
imageName = NULL;
|
|
#endif
|
|
PROCESS_INFORMATION pi;
|
|
BOOL result;
|
|
#ifndef _UNICODE
|
|
if (!g_IsNT)
|
|
{
|
|
STARTUPINFOA si;
|
|
si.cb = sizeof(si);
|
|
si.lpReserved = NULL;
|
|
si.lpDesktop = NULL;
|
|
si.lpTitle = NULL;
|
|
si.dwFlags = 0;
|
|
si.cbReserved2 = 0;
|
|
si.lpReserved2 = NULL;
|
|
|
|
CSysString curDirA;
|
|
if (curDir != 0)
|
|
curDirA = GetSystemString(curDir);
|
|
const AString s = GetSystemString(params2);
|
|
result = ::CreateProcessA(NULL, s.Ptr_non_const(),
|
|
NULL, NULL, FALSE, 0, NULL, ((curDir != 0) ? (LPCSTR)curDirA: 0), &si, &pi);
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
STARTUPINFOW si;
|
|
si.cb = sizeof(si);
|
|
si.lpReserved = NULL;
|
|
si.lpDesktop = NULL;
|
|
si.lpTitle = NULL;
|
|
si.dwFlags = 0;
|
|
si.cbReserved2 = 0;
|
|
si.lpReserved2 = NULL;
|
|
|
|
result = CreateProcessW(imageName, params2.Ptr_non_const(),
|
|
NULL, NULL, FALSE, 0, NULL, curDir, &si, &pi);
|
|
}
|
|
if (result == 0)
|
|
return ::GetLastError();
|
|
::CloseHandle(pi.hThread);
|
|
_handle = pi.hProcess;
|
|
return 0;
|
|
}
|
|
|
|
WRes MyCreateProcess(LPCWSTR imageName, const UString ¶ms)
|
|
{
|
|
CProcess process;
|
|
return process.Create(imageName, params, NULL);
|
|
}
|
|
|
|
}
|