Monday, April 7, 2008

Deactivate the name.dll active x control

Websites built on SharePoint 2007 prompts you to install Microsoft's Name.dll ActiveX control on every page load of your SharePoint web site. Name.dll provides "presence" functionality, that is if you have Messenger it will display your online status. This is annoying, I think anyway :)



To remove the prompt on a site you have to do the following:

Go to the folder (the one and ONLY folder as a Sharepoint developer/administrator...)

"C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS"

If you don't want this to affect all of your websites (it is a really useful function on your intranet for example) so create a new folder on your server and copy the contents of the "LAYOUTS" folder to a new folder. Let's ensure SharePoint will have permission to access the files. Through Explorer, open the properties for your newly created folder and under the security tab add the "WSS_WPG" account (the default Read & Execute, List, and Read permissions are enough) and let's add the WSS_ADMIN_WPG account with full permissions (see image below). In the IIS Manager Console, open the properties for the "_layouts" virtual directory (under the web site you want to modify) and change the local path directory to your newly created folder. Test your Web Site and make sure everything is working.

The ActiveX feature is in a script file called INIT.JS located in the \LAYOUTS\1033 folder.

Go to the function called EnsureIMNControl()
Comment out the ActiveXObject line:
//IMNControlObj=new ActiveXObject("Name.NameCtrl.1");

After applying any updates or service packs to SharePoint you'll probably want to reverse this customization and perform these steps again after the update to ensure your web site is running on the latest code.
function EnsureIMNControl()
{
if (!bIMNControlInited)
{
if (browseris.ie5up && browseris.win32)
{
//@cc_on
//@if (@_jscript_version >=5)
//@ try
//@ {
//@ //IMNControlObj=new ActiveXObject("Name.NameCtrl.1");
//@ } catch(e)
//@ {
//@
//@ };
//@else
//@end
}
bIMNControlInited=true;
if (IMNControlObj)
{
IMNControlObj.OnStatusChange=IMNOnStatusChange;
}
}
return IMNControlObj;
}

2 comments:

Anonymous said...

What an excellent post, our entire website was swampt by this issue for 5 months, and microsoft refused any support. Thanks so much

Lise said...

Wow, that's great news! Happy to be at any help!

Take care,
Lise