Error with Windows Installer … “Unable to get inst

2019-01-28 06:34发布

问题:

I'm experiencing an error when using the windows installer to install an event source in a product I am deploying.

The error message I receive states the following ...

Unable to get installer types in the c:\temp\program.exe assembly. --> Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

Here is the block of code that creates the event source installer ...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Diagnostics;

namespace myapplication
{
    [RunInstaller(true)]
    public partial class EventSourceInstaller : Installer
    {
        public EventSourceInstaller()
        {
            InitializeComponent();

            string eventSourceName = "MyAppSourceName";
            if (!EventLog.SourceExists(eventSourceName))
            {
                EventSourceCreationData data = new EventSourceCreationData(eventSourceName, "Application");
                EventLog.CreateEventSource(data);
                EventLog.WriteEntry(eventSourceName, "Source Added.");
            }
        }
    }
}

In the installer project I've added a custom action on Install named "Primary output from MyApplication (Active)" to run the event source installer.

I have the following questions

  1. Has anyone else run across this and what was the issue?

  2. How do I go about retrieving the LoaderExceptions property of the installer?

回答1:

I have never seen that error, but the path c:\temp\program.exe is very strange. Are you trying to run the installer from the c:\temp\ directory?

Are you certain the output of all projects and all third-party DLLs you use are included in the Deployment project? Click on all included files in the Deployment project and check their SourcePath property; are they to the original source files and not the target output folder? Not the temp folder?



回答2:

The "Detected Dependencies" of your setup project are not up to date. In my case refreshing the dependencies does not work. Due to adding an dll to the setup project dependencies visual studio refreshed them all. After rebuilding the setup project and the error didn't occurred any more!



回答3:

I had exactly the same problem.

I guess your program is referencing other DLLs which the installer install in the GAC or somewhere else outside of the application directory. You can't count on those DLLs being installed before your install action runs.

Solution: Create a separate DLL for your install action and make sure that DLL does not reference any other DLL (directly or indirectly) that are not installed inside your application folder.

BTW, if you can, switch to some other technology. I don't know which competitors are better, but if you do non-standard stuff, the VS install project will cause you nothing but trouble.



回答4:

My problem was that I was using the 64 bit version of installutil.exe instead of the 32 bit version.

  • 32 bit path - C:\Windows\Microsoft.NET\Framework\v4.0.30319

  • 64 bit path - C:\Windows\Microsoft.NET\Framework64\v4.0.30319