A plug-in consists of two DLLs:

1) Design-Time/Compile-Time DLL. Invoked from the IDE while setup is being designed, and compiled.

2) Run-Time DLL. Invoked from the running setup program while product is actually being installed.

The design/compile time DLL is responsible for:
1) Display user interface, allowing programmer to configure plug-in options
2) Participate in the build process, by copying the runtime dll, and required support files, to the build location.

The runtime DLL is responsible for:
1) Perform actual plug-in task while install is running
2) Properly return updated state of variables to calling process
3) Update progress for lengthy operations with callbacks

Please see help for more details.