0
votes

I created an installer in wise, for a Delphi application which using an in-proc (DLL) COM-Server. I configured the DLL in the Wise project as "Do not register", but after a test installation it is registered anyway?

enter image description here

Is this an "undocumented feature" of WISE or am I doing something wrong?

Does anyone have a workaround or a fix for this issue?

P.S. The reason that I don't want to register the DLL is that on target PC that COM server already may be registered for another application with specific settings (threading model, path, etc) which I don't want to touch.

2

2 Answers

3
votes

I'm trying to avoid this turning into a "what tool should I use thread". That said, WiX/IsWiX is free open source and should meet your needs. (It's hard to say for sure since I have no idea what other requirements this MSI would have.)

That said, is there any chance that the DLL was already registered? Are you testing on a snapshotted VM or other reproducible environment where you can be 100% certain that it was not?

If so, are there any other actions in the wise script that could be causing the registration to happen. I'm not aware of a bug/feature in wise but if there is, you are SOL because that product has long been dead and there is no support or updates available.

One last note. You're comment about the DLL might already be there and registered... that's called DLL hell. What if it's not there... now you aren't registered. You've got some design problems you need to resolve before you ever hope to have a high quality installation experience regardless of what tool you use.

1
votes

I found a possible solution or workaround (possible because I did't understand it till the end, but it's working).

COM DLL will be registered on target PC, even if it is marked with "Do not register", in case if it is registered on deployment PC. Solution:

  • unregistered DLL from local (deployment) PC
  • Remove it from installation package, save (and compile) package
  • re-Add COM DLL to package, mark it with "Do not register", save and compile.

After these steps it works as expected - DLL is not registered on target PC.

It seems this is happening because of windows installer advertising (which still i didn't understand properly), but from WISE documentation I found:

"How Self-Registration Information is Captured When you add a .DLL or .OCX file containing COM self-registration information to an installation, its registration information is scanned and the appropriate registry keys are added to the installation. This system of registration is more robust than letting the file self-register at installation time because it does not depend on the presence of other files on the destination computer or on how well the .OCX or .DLL file adheres to self-registration conventions."

For this reason as additional measure, before above described steps, I changed WISE Advertising options:

Wise > Tools > Options ... Advertising tab

For Advertising Setting: selected Do not scan advertising information option.
Unchecked option Automatically add self-registration.


All this written is actual solution, but thanks to @Christopher Painter response I was introduced in "DLL Hell" terminology, especially for COM DLLs, so that as LONG-TERM solution (in perspective) i would check for Registration-Free Activation of COM Components (link).