Click here to Skip to main content
Click here to Skip to main content

Sharepoint Solution Install with WSP Builder Made Easy

By , 19 Oct 2010
Rate this:
Please Sign up or sign in to vote.

Introduction

This article will describe how to install a basic Sharepoint wsp solution using WSPBuilder and a couple of install scripts.

Background

Installing Sharepoint features can have several challenges, but with a few well placed steps, you can be off and running.

Disclaimer - Hope this helps, if it doesn't, don't bother to harass me about it, you get what you pay for and you got this for free. If this worked for you, vote me a 5!

Getting Started

The first step to installing a feature or other code on your site is to decide which site you wish to install to. Generally Sharepoint allows you to create as many sites on different ports as you like. Once you know which site you want to deploy a solution to, you can then build your solution using WSPBuilder. Below is a typical project hierarchy for a feature with some custom pages in Visual Studio:

Sharepoint-article-image1.JPG

Notice the main content files in a feature deploy are located under the TEMPLATE directory. This allows WSPBuilder to build a .wsp solution file that understands once deployed where to put everything. While building your feature project is fodder for another article in the interest of direction, you can see by the image that there are several sections for content. These are only important in that they reside in their proper place under the TEMPLATE directory. There are several ways to build a WSPBuilder-centric project, this is only one of many.

To build your project, once you have completed development, you must have installed the Visual Studio plugin for WSPBuilder (located here). To create your solution file, you will need to right click on your project, select WSPBuilder and the menu item "Build WSP". This builds a Sharepoint solution file in the root directory of your project.

WSPBuilder-deploy.JPG

Once you have built your solution file, you will need to run some sort of installation script to install it to Sharepoint. Below is a handy one I created. To use it, you only need to change the variables thus:

  • WSPNAME - This is the name of your solution file compiled using WSPBuilder.
  • SERVERSITEURL - This is a combination of your Sharepoint server name, port, and site collection name (if applicable) where you would like the solution deployed.
  • FEATUREGUID - This comes from your feature.xml file, it is the feature id.
@echo off
CLS
SETLOCAL
SET StartDateTime=%DATE% at %TIME%
@SET STSADM="c:\program files\common files\microsoft shared\
		web server extensions\12\bin\stsadm"
@SET WSPNAME="[Your Solution File Name].wsp"
@SET SERVERSITEURL=[your server name: your port name]/sites/[Your Site Collection Name]
@SET FEATUREGUID="[your guid]"
ECHO --------------------------------------------
ECHO ^| %WSPNAME% deployment process ^|
ECHO ^| Started on %StartDateTime% ^|
ECHO --------------------------------------------

TITLE Deploying %WSPNAME% solution...

Echo Add the solution to Solution gallery....
%STSADM% -o addsolution -filename %WSPNAME%
IF %ERRORLEVEL% NEQ 0 GOTO ERR

Echo Deploying the solution across farm.... 
%STSADM% -o deploysolution -name %WSPNAME% -immediate 
	-allowGacDeployment -url http://%SERVERSITEURL%/
IF %ERRORLEVEL% NEQ 0 GOTO ERR

NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback

:iisreset /noforce

Echo Activating feature....
%STSADM% -o activatefeature -id %FEATUREGUID% -url http://%SERVERSITEURL%/ -force

GOTO END

:ERR
TITLE Error!
Echo Error! Deployment has not been completed.

:END
ECHO -
ECHO - Done!
TITLE Done!
SET EndDateTime=%DATE% at %TIME%
ECHO --------------------------------------------
ECHO ^| %WSPNAME% deployment process ^|
ECHO ^| Started on %StartDateTime% ^|
ECHO ^| Ended on %EndDateTime%   ^|
ECHO --------------------------------------------

popd
ENDLOCAL
pause

The FEATUREGUID variable is taken from the feature.xml id attribute:

<Feature 
Id="8682CCBC-C49B-4957-ADAA-708E40C06121" 
Title="SampleFeature" 
Description="This is your feature description, 
notice the scope is 'Site' since this example deploys on the site collection" 
Scope="Site" 
Hidden="false" 
ImageUrl="SampleFeature\icon_contactlist.gif" 
ReceiverAssembly="SampleFeatureProject, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=e30e9c1baed5c190" 
ReceiverClass="SampleFeatureProject.FeatureReceiver" 
xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <ElementManifests> 
        <ElementManifest Location="elements.xml"/> 
    </ElementManifests> 
</Feature>   

Once you have changed the variables in the script, you can run this script and look in the Central Administration/Operations/Solution Management Page to see if errors occurred or if the solution was deployed correctly.

operations-solutiondeploy.JPG

If you ever want to uninstall the solution, here is a script for that as well:

@echo off
CLS
SETLOCAL
SET StartDateTime=%DATE% at %TIME%
@SET STSADM="c:\program files\common files\microsoft shared\
		web server extensions\12\bin\stsadm"
@SET WSPNAME="[Your Solution File Name].wsp"
@SET SERVERSITEURL=[your server name: your port name]/sites/[Your Site Collection Name]
@SET FEATUREGUID="[your guid]"

ECHO --------------------------------------------
ECHO ^| %WSPNAME% uninstalling process ^|
ECHO ^| Started on %StartDateTime% ^|
ECHO --------------------------------------------

TITLE Uninstalling %WSPNAME% solution...
Echo Deactivating feature.... 
%STSADM% -o deactivatefeature -id %FEATUREGUID% -url http://%SERVERSITEURL%/ -force

Echo Retracting the solution from Web farm....
%STSADM% -o retractsolution -name %WSPNAME% -immediate -url http://%SERVERSITEURL%/
IF %ERRORLEVEL% NEQ 0 GOTO ERR

echo Wait for %WSPNAME% to be retracted....

NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback
NETSH Diag Ping Loopback

Echo Deleting the solution from solution gallery....
%STSADM% -o deletesolution -name %WSPNAME% -override
IF %ERRORLEVEL% NEQ 0 GOTO ERR

:iisreset /noforce
GOTO END

:ERR
TITLE Error!
Echo Error! Uninstalling has not been completed.

:END
ECHO -
ECHO - Done!
TITLE Done!
SET EndDateTime=%DATE% at %TIME%
ECHO --------------------------------------------
ECHO ^| %WSPNAME% uninstalling process ^|
ECHO ^| Started on %StartDateTime% ^|
ECHO ^| Ended on %EndDateTime%   ^|
ECHO --------------------------------------------

popd
ENDLOCAL
pause

Points of Interest

Pretty simple, huh? Notice the NETSH Diag Ping Loopback statements, this allows a pause in the scripts to allow Sharepoint to do its thing.... if the uninstall fails or does not complete at any point, just re-run it till it uninstalls the feature completely. Hope this helps, if it doesn't, don't bother to harass me about it, you get what you pay for and you got this for free.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Christopher G. Lasater
Web Developer
United States United States
Christopher G. Lasater
 
I am also a published author, please check out my book:
ISBN: 1-59822-031-4
Title: Design Patterns
Author:Christopher G. Lasater
More from my web site
Amazon.com


Comments and Discussions

 
GeneralDeploying to different SharePoint servers (DEV, UAT, PROD etc.) Pinmemberjeremycook12324-Feb-11 13:56 
GeneralMy vote of 5 PinmemberChristopher G. Lasater18-Oct-10 10:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140415.2 | Last Updated 19 Oct 2010
Article Copyright 2010 by Christopher G. Lasater
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid