Я использую библиотеку обхода MS для подключения CreateProcess, и она отлично работает на Win7. Затем я хочу заменить отклоненный CreateProcess на ShellExecuteEx, чтобы я мог использовать 'runas' для автоматического запуска программы с привилегиями администратора. К сожалению, тип параметра не совпадает.
Это сигнатура функции:
CreateProcess(
LPCWSTR lpszImageName,
LPCWSTR lpszCmdLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPWSTR lpszCurDir,
LPSTARTUPINFOW lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo
);
Здесь я вызываю ShellExecuteEx:
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = 0 ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = lpszImageName; // this is obatined within deboured CreateProcess.
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
Однако, это назначение имеет ошибку: ShExecInfo.lpFile = lpszImageName;
VC2005 жалуется, что тип данных не совпадает: "cannot convert from const unsigned char * to const char *"
.
Но тип данных LPCWSTR
для параметра lpszImageName в CreateProcess, а ShExecInfo.lpFile - LPCTSTR
.
Если я использую (const unsigned char *) для преобразования lpszImageName, значение lpFile является только первой буквой значения lpszImageName.
Например, если lpszImageName - «C: \ windows \ system32 \ cmd.exe». После присваивания значение lpFile - только «C».
Как я могу конвертировать из LPCWSTR в LPCTSTR? Или как я мог сделать преобразование?
Спасибо !!!