From: ethan_j_brown@... Date: 2016-05-12T16:20:05+00:00 Subject: [ruby-core:75476] [Ruby trunk Bug#12371] Windows Nano Server WIN32OLE compatibility Issue #12371 has been updated by Ethan Brown. Yes, the behavior of `OleInitialize` is generally additive and per the docs at https://msdn.microsoft.com/en-us/library/windows/desktop/ms690134(v=vs.85).aspx, it is necessary to call before using any COM functions that use: * Clipboard * Drag and Drop * Object linking and embedding (OLE) * In-place activation Under the hood, `OleIntialize` calls `CoInitializeEx` with `COINIT_APARTMENTTHREADED`, but that value is unsupported on Nano. See the `COINIT` enumeration docs for more details at https://msdn.microsoft.com/en-us/library/windows/desktop/ms678505(v=vs.85).aspx I think the main point here is that calling `OleInitialize` will never work on Nano Server, since Nano only supports `COINIT_MULTITHREADED`, which `OleInitialize` cannot specify. Nano does support COM, but not all of the functionality that Ruby might normally enable on other platforms by calling `OleInitialize`. It's better in this case to have a degraded experience on Nano that still allows `WIN32OLE` to work / interact with COM objects, even if it doesn't support `OleInitialize`. Also note that `WIN32OLE.connect` will not work since Nano does not support COM monikers. ---------------------------------------- Bug #12371: Windows Nano Server WIN32OLE compatibility https://bugs.ruby-lang.org/issues/12371#change-58597 * Author: Alessandro Pilotti * Status: Assigned * Priority: Normal * Assignee: Masaki Suketa * ruby -v: * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- The `OleInitialize()` call used in WIN32OLE is not supported on Nano Server due to the fact that the STA COM model is not available: https://github.com/ruby/ruby/blob/32674b167bddc0d737c38f84722986b0f228b44b/ext/win32ole/win32ole.c#L820 As an alternative, `CoInitializeEx(NULL, COINIT_MULTITHREADED)` can be called when running on Nano Server, thus ensuring both compatibility with the preexisting behaviour and support for Nano Server. -- https://bugs.ruby-lang.org/ Unsubscribe: