0

The application below successfully works on our Dev/QA team machines:

using Autofac;
using Word = Microsoft.Office.Interop.Word;

namespace ComObjectIssue
{
    public interface IDateWriter
    {
        void WriteDate();
    }

    public class TodayWriter : IDateWriter
    {
        private readonly Word.Application wordApp;
        public TodayWriter(Word.Application wordApp)
        {
            this.wordApp = wordApp;
        }

        public void WriteDate()
        {
            //...
        }
    }

    public class Program
    {
        private static IContainer Container { get; set; }

        static void Main(string[] args)
        {
            var builder = new ContainerBuilder();
            var wordApp = new Word.Application();
            builder.RegisterInstance(wordApp).SingleInstance();
            builder.RegisterType<TodayWriter>().As<IDateWriter>();
            
            Container = builder.Build(); // throws "System.ArgumentException: The type 'System.__ComObject' is not assignable to service 'Microsoft.Office.Interop.Word.Application'."

            using (var scope = Container.BeginLifetimeScope())
            {
                var writer = scope.Resolve<IDateWriter>();
                writer.WriteDate();
            }

            wordApp.Quit();
        }
    }
}

But does not work for one of our customers — Autofac throws the following exception while creating container:

System.ArgumentException: The type 'System.__ComObject' is not assignable to service 'Microsoft.Office.Interop.Word.Application'.
   at Autofac.Builder.RegistrationBuilder.CreateRegistration(Guid id, RegistrationData data, IInstanceActivator activator, IResolvePipelineBuilder pipelineBuilder, Service[] services, IComponentRegistration target)
   at Autofac.Builder.RegistrationBuilder.CreateRegistration[TLimit,TActivatorData,TSingleRegistrationStyle](IRegistrationBuilder`3 builder)
   at Autofac.Builder.RegistrationBuilder.RegisterSingleComponent[TLimit,TActivatorData,TSingleRegistrationStyle](IComponentRegistryBuilder cr, IRegistrationBuilder`3 builder)
   at Autofac.ContainerBuilder.Build(IComponentRegistryBuilder componentRegistry, Boolean excludeDefaultModules)
   at Autofac.ContainerBuilder.Build(ContainerBuildOptions options)

Reinstallation Microsoft Visual Studio 2010 Tools for Office Runtime did not help.


  • Autofac version: 6.2.0.0
  • Target: .NET Framework 4.8

Is there idea of what can happen or what should be checked else?


UPDATE

MS Word version: 16.0

Today we were able to fix the issue by running MS Word as Administrator. Unfortunately, such solution is not applicable, since the client's security policy does not allow to use Administrator permission.

I cannot reproduce it on my side — it works for me with a non-Administrator account. Looks like some certain permission is required, but what?

Adam Shakhabov
  • 1,194
  • 2
  • 14
  • 35

0 Answers0