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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>