Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 4531664
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 21, 20262026-05-21T13:55:56+00:00 2026-05-21T13:55:56+00:00

I have a wierd application loading mechanism. I have a boostrapping exe file with

  • 0

I have a wierd application loading mechanism. I have a boostrapping exe file with all the other DLLs and the application itself inside it’s resources. These files (assemblies) are extracted from resources and loaded ond emand because i’m attaching to the Assemblyresolve event of the current AppDomain.

 [STAThread]
        static void Main()
        {
            // if the command line contains extract then extract the dlls, next run will resolve assemblies from disk
            bool saveDllsToDisk = new List<string>(Environment.GetCommandLineArgs()).Contains("extract");
            // if the command line contains bin then use the bin folder instead of temp to extract dlls
            bool useBinFolder = new List<string>(Environment.GetCommandLineArgs()).Contains("bin");

            if (!Directory.Exists(tempFolder)) {
                Directory.CreateDirectory(tempFolder);
            }

            // the assembly resolver will get here because it will not find the dlls in the bin folder
            // we load assemblies in our specific way:
            // - if exists in our temp/bin folder load from there
            // - else load from resources
            // - if specified extract DLLs to the temp/bin folder
            AppDomain.CurrentDomain.AssemblyResolve += (sender, args2) =>
            {
                string name = new AssemblyName(args2.Name).Name;
                Debug.WriteLine("START LOADING " + name);

                Assembly assembly = null;
                string folder = useBinFolder ? binFolder : Path.Combine(tempFolder, APP_NAME);
                string fileName = name.Replace(".","_").Replace("#EXE#", ""); // in resources we use _ instead of .
                string extension = name.Contains("#EXE#") ? "exe" : "dll"; // hack for our embedded exe files
                name = name.Replace("#EXE#", ""); // hack for our embedded exe files

                if (File.Exists(Path.Combine(folder,String.Format("{0}.{1}", name, extension))))
                {
                    // load from file in app temp folder
                    assembly = Assembly.LoadFile(Path.Combine(folder, String.Format("{0}.{1}", name, extension)));
                }
                else
                {
                    // extract assembly from resources
                    byte[] assemblyBytes = (byte[])resMan.GetObject(fileName, CultureInfo.InvariantCulture);
                    assembly = Assembly.Load(assemblyBytes);

                    // if selected save to file so the next run JIT will resolve from disk
                    if (saveDllsToDisk)
                    {
                        string outDll = Path.Combine(folder, String.Format("{0}.{1}", name, extension));
                        using (var fs = File.Create(outDll))
                        {
                            fs.Write(assemblyBytes, 0, assemblyBytes.Length);
                        }
                    }
                }

                Debug.WriteLine("LOADED " + name);
                return assembly;
            };

            splashScreen = new frmSplash();
            // as soon as splashscreen starts animating assembly preloading will be launched on this eventhandler
            splashScreen.Started += new EventHandler(splash_Started);
            // splashscreen has finished fadein we must now wait for all libraries to be preloaded and set CanContinue
            splashScreen.Finishing += new EventHandler(splash_Finishing);
            splashScreen.CanContinue = false;

            // run splashscreen while preloading of DLLs is going on
            Application.Run(splashScreen);
        }

This bootstrapper has only one reference and that is to the main application, but it does not reference it in the main method to avoid assembly search at start. What I do is force assembly loading during the splashscreen animation:

ObjectHandle instance;

                string[,] assemblies = {
                     {"WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","dummy"}, // will go from GAC, not our resolver
                     {"PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","dummy"}, // will go from GAC, not our resolver
                     {"PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","dummy"}, // will go from GAC, not our resolver
                     {"WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","dummy"}, // will go from GAC, not our resolver
                     {"PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","dummy"}, // will go from GAC, not our resolver
                     {"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","dummy"}, // will go from GAC, not our resolver                     
                     {"AvalonDock, Version=1.3.3585.0, Culture=neutral, PublicKeyToken=85a1e0ada7ec13e4", "dummy"}, // out reference inside resources
                     {"AvalonDock.Themes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "dummy"}, // out reference inside resources
                     {"ICSharpCode.AvalonEdit, Version=4.0.0.5950, Culture=neutral, PublicKeyToken=9cc39be672370310", "dummy"}, // out reference inside resources
                     {"WPG, Version=2.0.4120.37542, Culture=neutral, PublicKeyToken=null","dummy"}, // out reference inside resources
                     {"WPGBrushEditor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","dummy"}, // out reference inside resources
                     {"HLSLEditor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","dummy"} // preload even our main file that will launch after the splashscreen
                };

                for (int i = 0; i <= assemblies.GetUpperBound(0); i++)
                {
                    try
                    {
                        instance = AppDomain.CurrentDomain.CreateInstance(assemblies[i,0], assemblies[i,1]);
                    }
                    catch (Exception ex) {
                        /* must not raise errors, it will fail because we are not actually asking for a
                         *  valid type and we only need this assembly loaded right now*/
                    }
                }

Now you see that there are no actual dll files in any folder but are assemblies directly loaded from resources.

My problem now is: How to register a COM object delared in one of my dll files?

RegAsm uses filepaths to register a COM object… 🙁

Any help appreciated!

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-21T13:55:57+00:00Added an answer on May 21, 2026 at 1:55 pm

    I digged a little and maybe implementing DllRegisterServer() intot he main executable and then registering all the COM types in all the embedded DLLs would work…

    Can anyone confirm?

    EDIT: Yes it can be done, but the main executable must be a COM proxy to the DLLs inside.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a wierd problem with threading in an ASP.NET application. For some reason,
i have this strange bug where... in my application.js file i have //= require
I have an application which has two Tabs. Both of these are ListFragments. The
I have an application, which is behaving weird at the moment. It's using an
I used to have a standard ASP.NET MVC 3 application that was Ninject-wired via
OK, this is a slightly weird question. We have a touch-screen application (i.e., no
I have a weird problem building a release of an erlang application that I'm
I have a server-client application and I've hit a weird speed bump with login
The Blackberry Torch is showing some wierd behaviour. I have subclassed EditField only for
I have been developing a Lync Silverlight application in Silverlight and now I am

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.