Excel Interop: создание экземпляра с помощью Task.Run приводит к исключению System.EntryPointNotFoundException

Вот мой минимальный пример, порождающий проблему:

using System.Runtime.InteropServices; using System.Threading.Tasks; using Excel = Microsoft.Office.Interop.Excel; class Program { static void Main(string[] args) { Task.Run(() => { Excel.Application app = new Excel.Application(); if (app != null) { app.Quit(); Marshal.FinalReleaseComObject(app); app = null; } }); } } 

Это приводит к следующему исключению:

введите описание изображения здесь

Последняя часть на японском языке указывает, что "EventSetInformation" of DLL advapi32.dll entry point cannot be found . Мне трудно понять, что происходит. В принципе, почему это исключение выбрасывается и что он пытается мне сказать?

Исключение в моем примере было произведено с помощью VS 2013 в Windows 7. В этом случае вызов EventSetInformation не может быть разрешен, поскольку функция не найдена в advapi32.dll . Затем я протестировал один и тот же код с помощью Visual Studio 2015 CTP и завершил его без каких-либо исключений. Это привело меня к мысли, что это конфликт версий.

Кроме того, в соответствии с здесь и EventSetInformation , EventSetInformation была добавлена в advapi32.dll в Windows 8. Именно поэтому ее нельзя было найти, когда я запускал код с VS 2013. Поэтому для запуска моего fragmentа кода мне нужна была более новая версия advapi32.dll, который включен в более поздние версии Visual Studio (или Windows 8).

ОБНОВИТЬ

Согласно https://github.com/dotnet/coreclr/issues/974

Обратите внимание, что группа OS уверяет нас, что Win7 будет исправлен, чтобы включить этот API в ближайшее время (в течение нескольких месяцев), так что даже исключение не произойдет в этом пункте

Таким образом, скорее всего advapi32.dll на Windows 7 будет обновляться, чтобы включить EventSetInformation некоторое время в будущем.