Я пытаюсь установить Windows Service (Build с CBuilder 6) с помощью ShellExecuteExShellExecuteEx не работает Стабильная
Вот моя установка функции.
int WinServiceInstall(WideString ServicePath)
{
int result = 0;
LPCWSTR filename = L"MyService.exe";
LPCWSTR params = L"/install /silent";
LPCWSTR dir = ServicePath;
WideString fullPath = ServicePath+"\\"+filename;
if (!PathFileExistsW(fullPath.c_bstr())) return -1;
SHELLEXECUTEINFOW *lpExecInfo = new SHELLEXECUTEINFOW();
try
{
lpExecInfo->cbSize = sizeof(SHELLEXECUTEINFOW);
lpExecInfo->hwnd = 0;
lpExecInfo->lpVerb = NULL;
lpExecInfo->lpFile = filename;
lpExecInfo->lpDirectory = dir;
lpExecInfo->lpParameters = params;
lpExecInfo->nShow = SW_HIDE;
lpExecInfo->hInstApp = NULL;
BOOL bResult = ShellExecuteExW(lpExecInfo);
WaitForSingleObject(lpExecInfo->hProcess,INFINITE);
if (!bResult)
{
int ErrorCode = GetLastError();
WideString message = GetLastErrorMessage(ErrorCode);
message +="\n"+IntToStr(ErrorCode);
MessageBoxW(0,message,L"GetLastError",0);
PrintError(ErrorCode);
result = -1;
}
}
catch(Exception &e)
{
printf("Hata: %s",e.Message);
result = -1;
WideString message = e.Message;
MessageBoxW(0,message,L"Exception",0);
}
delete lpExecInfo;
return result;
}
Но функция ShellExecuteEx не работает стабильно.
Иногда бросает исключение EAccessViolation.
Как я могу устранить проблему? Где моя ошибка?
Спасибо.
Вы инициализировали COM перед вызовом ShellExecuteExW? – Asesh
API Windows не выбрасывает исключения C++. Используете ли вы какие-либо расширения компилятора, которые позволяют вам исключить стандартный синтаксис C++ для исключений SEH? Независимо от этого, поскольку вам все равно не нужна поддержка оболочки, почему бы вам просто не использовать «CreateProcess» вместо игры в русскую рулетку? – IInspectable
@IInspectable Я не использую расширение компилятора. –