klmag
11-20-2013, 08:19 PM
I have about ~50 .DLLs + 2 COM Interop DLLs, which were created from tlb, and the 2 DLLs that were used to created the tlb's. I'm making the switch from InstallShield to SB8.1.
In InstallShield, it shows, of the ~50 .DLLs, that they are Shared, COM Extract at Build = Yes, .NET Scan at Build = Dependencies and Properties, .NET COM Interop = No.
In SB8.1, I've tried a bunch of different combinations of setting up the project to register even just 1 of the 50 .DLLs, but failed every time.
To paint a picture, after my application is installed and run, I check to see if the 2 COM Interop DLLs (and the 2 original .DLLs) are registered; my application will shut down if they aren't.
When the user invokes commands which calls (Note one of my Interops is for IDeviceInfo, the other 50 DLLs implement IDeviceInfo):
Type comObjectType = Type.GetTypeFromProgID(className, true);
object comObj = Activator.CreateInstance(comObjectType);
_Plugin = (IDeviceInfo)comObj;
The comObj cannot be created because the .DLL with that class name wasn't registered.
I used a dependency scanner to see if the .DLLs were registered, which it showed that they were not, however when I searched the register for the class names, all the class names were in the registry!
So my question is, all is all the type information getting into the registry, but the .DLL isn't registered? If I register the 50 DLLs using regsvr32, then everything works like a charm and the dependency scanner picks up the .DLLs.
Any suggestions? I tried using the GUI "Details..." of the components, I've tried using Register File Operation settings, but nothing seems to work. I also pondered if it could be the order in which the operations were in the script, but I don't know.
In InstallShield, it shows, of the ~50 .DLLs, that they are Shared, COM Extract at Build = Yes, .NET Scan at Build = Dependencies and Properties, .NET COM Interop = No.
In SB8.1, I've tried a bunch of different combinations of setting up the project to register even just 1 of the 50 .DLLs, but failed every time.
To paint a picture, after my application is installed and run, I check to see if the 2 COM Interop DLLs (and the 2 original .DLLs) are registered; my application will shut down if they aren't.
When the user invokes commands which calls (Note one of my Interops is for IDeviceInfo, the other 50 DLLs implement IDeviceInfo):
Type comObjectType = Type.GetTypeFromProgID(className, true);
object comObj = Activator.CreateInstance(comObjectType);
_Plugin = (IDeviceInfo)comObj;
The comObj cannot be created because the .DLL with that class name wasn't registered.
I used a dependency scanner to see if the .DLLs were registered, which it showed that they were not, however when I searched the register for the class names, all the class names were in the registry!
So my question is, all is all the type information getting into the registry, but the .DLL isn't registered? If I register the 50 DLLs using regsvr32, then everything works like a charm and the dependency scanner picks up the .DLLs.
Any suggestions? I tried using the GUI "Details..." of the components, I've tried using Register File Operation settings, but nothing seems to work. I also pondered if it could be the order in which the operations were in the script, but I don't know.