Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- wchar_t arrayArg[65535];
- int size_lenght;
- // first try - load dll and register it manually.
- HRESULT hResult = S_OK;
- // if failed - try by loading extension manually (would fail on vista when running as user)
- hResult = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if(SUCCEEDED(hResult))
- {
- HRESULT (STDAPICALLTYPE *pfn)(void);
- size_lenght=dllPath.toWCharArray(arrayArg);
- HINSTANCE hMod = LoadLibrary(arrayArg); // load the dll
- if(hMod == NULL)
- hResult = HRESULT_FROM_WIN32(GetLastError());
- if(SUCCEEDED(hResult) && !hMod)
- hResult = E_FAIL;
- if(SUCCEEDED(hResult))
- {
- (FARPROC&)pfn = GetProcAddress(hMod, (bRegister ? "DllRegisterServer" : "DllUnregisterServer"));
- if(pfn == NULL)
- hResult = E_FAIL;
- if(SUCCEEDED(hResult))
- hResult = (*pfn)();
- CoFreeLibrary(hMod);
- }
- CoUninitialize();
- if(SUCCEEDED(hResult) && SCODE_CODE(hResult) != ERROR_ACCESS_DENIED)
- return true;
- }
- ////////////////////////////// Second way to load //////////////////////////////
- QStringList arguments;
- arguments.append("/s");
- if(!bRegister)
- arguments.append("/u");
- arguments.append(dllPath);
- QString argumentsString;
- for (int i = 0; i < arguments.size(); ++i) {
- if(argumentsString.isEmpty())
- argumentsString+=arguments.at(i);
- else
- if(i == arguments.size())
- argumentsString+=" \""+arguments.at(i)+"\"";
- else
- argumentsString+=' '+arguments.at(i);
- }
- int result=QProcess::execute("regsvr32",arguments);
- bool ok=false;
- if(result==0)
- ok=true;
- if(result==5)
- {
- if(!quiet)
- {
- ////////////////////////////// Last way to load //////////////////////////////
- // try with regsvr32, win32 because for admin dialog
- size_lenght=argumentsString.toWCharArray(arrayArg);
- //size_lenght*sizeof(wchar_t)
- wcscpy(arrayArg+size_lenght*sizeof(wchar_t),TEXT("\0"));
- SHELLEXECUTEINFO sei;
- memset(&sei, 0, sizeof(sei));
- sei.cbSize = sizeof(sei);
- sei.fMask = SEE_MASK_UNICODE;
- sei.lpVerb = TEXT("runas");
- sei.lpFile = TEXT("regsvr32.exe");
- sei.lpParameters = arrayArg;
- sei.nShow = SW_SHOW;
- ok=ShellExecuteEx(&sei);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement