outlook shared addin won't load in outlook 2003 if VS 2008 not ins

  • Thread starter Thread starter BatKing
  • Start date Start date
B

BatKing

Hi Everyone,

I am fairly new to office add-in development. I developed a outlook addin
with VS 2008 with shared add-in templated in C#. the plugin was developed for
both outlook 2003 and 2007. so in all the references within the project I
used all office version 11.

everything works fine. but the add-in won't load for office 2003. I used the
VS 2008's auto generated setup project to install this add-in in another 2
newly build machines. one with XP and office 2007 one with XP and office 2003
and office 2003 PIA (can someone tell me if a normal installation of office
2003 will install the PIA just like 2007 ? or I have to install the PIA
seperately?) My development machine has office 2007 installed so during
development I tested everything on outlook 2007

on the office 2007 machine, everything works fine. use the .msi file created
by the VS2008 and the add-in setup fine and loads correctly.

However on the office 2003 machine, the add-in won't load. it won't even
call the Connect method. I checked the registry entry. initially the load
behavior value in the registry was 3 right after the setup program finished.
however once I launch outlook then the registry value changed to 2. (I
installed office PIA already).

Now the funny part, since my development machine already has Office 2007
installed, so I can't test it on my dev machine. so I used the office 2003
machine as a Dev machine and installed VS 2008 on it and try to debug. but
once VS 2008 is installed, everything works fine. in VS debug mode, VS
release mode or clean all the builds and use the .msi file created on my
original dev machinea and install the add-in. it works fine on all the above
3 ways. then I uninstall VS 2008, everything won't work again. it seem VS
2008 has some files or reference or assembly which is needed to load the
addin and just installing office 2003 and PIA is not enough.

am I doing something wrong? anything I should know? I am totally lost now.

Thanks.
 
Office 2007 installs the PIA's if the Framework is already installed when
Office 2007 is installed unless a custom installation disables installation
of the PIA's. If the Framework is not installed Office 2007 doesn't install
the PIA's. The Framework is not required for Office 2007.

For Office 2003 the PIA's are installed only for a custom installation where
they are selected for installation.

The redistributable PIA package for Office 2007 includes extensibility and
stdole. The Office 2003 redistributable package for the PIA's does not
include either extensibility or stdole and those plus possibly a registry
lockback key need to be installed separately. There's a KB 908002 for that.

When you install VS you most likely got stdole and extensibility installed
for you during installation.
 
Thanks Ken,

KB908002 is for VS 2005 and I am using VS2008. so I thought this should
already be fixed in VS 2008? and the fix in KB908002 won't install on my dev
machine as I don't have VS2005 installed.

what should I do now?
 
BTW, by installing ExtensibilityMSM.msi on the target machine with office
2003, the problem is solved.

However, how can I make the extnesibility.dll included in my add-in setup
..msi file? so that users with outlook 2003 don't need to install 2 things at
once.
 
You need to set up prerequisites for not only Extensibility but also the
PIA's in case they aren't installed. For Office 2003 you need both the
redistributable PIA's and Extensibility (that also installs stdole). For
Office 2007 you only need the redistributable PIA's package which also
installs Extensibility and stdole.

Your prerequisites should check for Office version installed and whether or
not the PIA's are installed.

A setup.exe will handle the prerequisites, the msi can't do that.
 
But in my prerequisite components list, there is no Extensibility. and there
is only MS office 2007 PIA.

How can I add prerequisite list which is not in "Choose which prerequisites
to install" list? I went to "Check Microsoft Update for more redistributable
components" and installed ".Net 2.0 SP2 and 3.0 SP2 bootstrapper packages".
but Extensibility never in the prerequsite list.

Also any guide on how to create setup.exe programatically? currently it
seems the setup project is auto generated and I am only able to change some
attribute in the properties list and setup.exe and .msi file will be auto
generated during build.

Thanks.
 
You would have to create your own bootstrapper prerequisite packages or
download them if available to make them available. You cannot create a
setup.exe using code unless you do it from scratch, the VS setup project
should create your setup.exe for you and include whatever you've checked off
as prerequisites.

These links might help:

http://blog.developers.ie/cgreen/archive/2006/10/27/2427.aspx

http://blogs.msdn.com/vsto/archive/...ite-in-your-clickonce-installer-mary-lee.aspx

http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/649b593a-8b65-4666-b379-8acd0b1f2c43/

This last link has a link to the Bootstrapper Manifest Generator, a tool
used to help create manifests for bootstrapper prerequisites.
 
Hi Ken,

One more question. Do I really need stdole? it seems I don't need it. I
uninstalled stdole from Global Assembly and it seems everything still works
fine for my add-in. Of course Extensibility has to be here. Also when
installing Extensibility from extensibilityMSM.msi, stdole won't get
installed (but your previous response said that by installing Extensibility
also installs stdole).

Thanks.
 
You're correct, I examined that MSI in Orca and it doesn't contain stdole.
If stdole isn't listed as one of your dependencies for the project then you
can safely not install it.
 
Although I don't know if you've considered the matter of you UI. If you plan
to use either CommandBarButton.Picture or .Mask, or supplying a ribbon
control image using code then you will need stdole.IPictureDisp and
therefore will need stdole.
 
Maybe not in the initial release version.

However during my learning and research, I do find something easier. instead
of making those assembly as prerequisit, I found out I can do it in the
following way.

1, right click on the Setup project and add assembly extensibility.dll
2. in custom action add DLLRegister for INSTALL for extensibility.dll. and
DLLUNRegister for unstaill and rollback

then my add-in will work even Extensibility not in my Assembly folder under
C:\Windows

Can I do this? Even I already built my custom prerequisit list for VS 2008
and tested it working correctly, I think the above way is cleaner? as only
one MSI file is good enough for me (of course PIA is not included here).
 
You mean deploy extensibility.dll into your installation folder? It can be
done but it's not really a good idea and definitely not a best practice. It
leads you right back to DLL Hell. Plus if some other code does install
extensibility in the GAC that will take precedence.
 
Back
Top