Читая о COM-объектах Я сталкивался с этим утверждением о флаге CLSCTX_LOCAL_SERVER
Если флаги включают CLSCTX_LOCAL_SERVER, код класса в сервисе находится под классомКлюч LocalService используется, если этот ключ существует. Если служба не указана, но в этом же ключе указан EXE-файл, используется код класса, связанный с этим EXE-файлом. Код класса (в любом случае) будет запущен в отдельном сервисном процессе на том же компьютере, что и вызывающая сторона.
Означает ли это, что для следующего кода контекст выполнения объекта FileDialog будет находиться вотдельный процесс? Это так просто, т.е. просто указать CLSCTX_LOCAL_SERVER
и больше ничего не требуется? И если это так, как я могу определить / убедиться, что этот отдельный процесс действительно запущен?
#include <windows.h>
#include <shobjidl.h>
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED |
COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOpenDialog *pFileOpen;
// Create the FileOpenDialog object.
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_LOCAL_SERVER,
IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
if (SUCCEEDED(hr))
{
// Show the Open dialog box.
hr = pFileOpen->Show(NULL);
// Get the file name from the dialog box.
if (SUCCEEDED(hr))
{
IShellItem *pItem;
hr = pFileOpen->GetResult(&pItem);
if (SUCCEEDED(hr))
{
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
// Display the file name to the user.
if (SUCCEEDED(hr))
{
MessageBoxW(NULL, pszFilePath, L"File Path", MB_OK);
CoTaskMemFree(pszFilePath);
}
pItem->Release();
}
}
pFileOpen->Release();
}
CoUninitialize();
}
return 0;
}