|
#1
|
|||
|
|||
Threads that call custom actions
I noticed that when a custom action is invoked, it is on an MTA thread.
In my case, I was writing a C# custom action that used Installshield automation COM objects. Being on an MTA thread caused library loading problems which was very difficult to diagnose, and was solved when I executed my actual build logic on a new STA thread. So, it would be nice in future versions of VBP if the thread that invokes custom actions could be an STA thread to provide a better environment for using COM interop. For me, of course right now I can just do the new thread thing each time. |
#2
|
|||
|
|||
By default, COM registration for a .NET component is marked with ThreadingModel=Both, and since VBP's builder component runs in an MTA, so will the called component. If you change it to ThreadingModel=Apartment (registry entry is at HKEY_CLASSES_ROOT\CLSID\{your .NET component's guid}\InprocServer32\ThreadingModel; I'm not sure if .NET provides an attribute to change this behavior so it may need to be manually modified), COM should then create an STA for the component and run it there.
|
|
|