mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-07 09:15:00 -06:00
9.34
This commit is contained in:
committed by
Kornel Lesiński
parent
83f8ddcc5b
commit
f08f4dcc3c
86
CPP/Windows/ProcessUtils.cpp
Normal file
86
CPP/Windows/ProcessUtils.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
// 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 = L'\"';
|
||||
s2 += s;
|
||||
s2 += L'\"';
|
||||
return s2;
|
||||
}
|
||||
#endif
|
||||
|
||||
WRes CProcess::Create(LPCWSTR imageName, const UString ¶ms, LPCWSTR curDir)
|
||||
{
|
||||
Close();
|
||||
const UString params2 =
|
||||
#ifndef UNDER_CE
|
||||
GetQuotedString(imageName) + L' ' +
|
||||
#endif
|
||||
params;
|
||||
#ifdef UNDER_CE
|
||||
curDir = 0;
|
||||
#else
|
||||
imageName = 0;
|
||||
#endif
|
||||
PROCESS_INFORMATION pi;
|
||||
BOOL result;
|
||||
#ifndef _UNICODE
|
||||
if (!g_IsNT)
|
||||
{
|
||||
STARTUPINFOA si;
|
||||
si.cb = sizeof(si);
|
||||
si.lpReserved = 0;
|
||||
si.lpDesktop = 0;
|
||||
si.lpTitle = 0;
|
||||
si.dwFlags = 0;
|
||||
si.cbReserved2 = 0;
|
||||
si.lpReserved2 = 0;
|
||||
|
||||
CSysString curDirA;
|
||||
if (curDir != 0)
|
||||
curDirA = GetSystemString(curDir);
|
||||
result = ::CreateProcessA(NULL, (LPSTR)(LPCSTR)GetSystemString(params2),
|
||||
NULL, NULL, FALSE, 0, NULL, ((curDir != 0) ? (LPCSTR)curDirA: 0), &si, &pi);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
STARTUPINFOW si;
|
||||
si.cb = sizeof(si);
|
||||
si.lpReserved = 0;
|
||||
si.lpDesktop = 0;
|
||||
si.lpTitle = 0;
|
||||
si.dwFlags = 0;
|
||||
si.cbReserved2 = 0;
|
||||
si.lpReserved2 = 0;
|
||||
|
||||
result = CreateProcessW(imageName, (LPWSTR)(LPCWSTR)params2,
|
||||
NULL, NULL, FALSE, 0, NULL, (LPWSTR)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, 0);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user