<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Mike Knowles</title>
    <link>http://mikeknowles.com/blog/</link>
    <description>Mike Knowles on ASP.NET, SharePoint and related technologies.</description>
    <language>en-us</language>
    <copyright>Mike Knowles</copyright>
    <lastBuildDate>Sun, 15 Aug 2010 03:03:12 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>mike@mikeknowles.com</managingEditor>
    <webMaster>mike@mikeknowles.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MikeKnowles3" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="mikeknowles3" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=5ad91aea-613a-4050-a161-2322ef4584c3</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,5ad91aea-613a-4050-a161-2322ef4584c3.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,5ad91aea-613a-4050-a161-2322ef4584c3.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5ad91aea-613a-4050-a161-2322ef4584c3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Using jQuery with ASP.NET Ajax greatly extends the range of the .NET front-end developer.
The benefit of using jQuery is it allows you to perform client-side DOM operations
and include jQuery plugins in your site to gain increased interactivity without having
to become a JavaScript expert. 
</p>
        <p>
The code below provides a template for setting up an ASP.NET Ajax page with an UpdatePanel
that makes use of jQuery. The template shows how to include the jQuery library from
the Google CDN and to setup the core essentials of an Ajax page - a loading indicator
(using the BlockUI plugin) and the display of an error message when an exception is
thrown on the server during an asynchronous postback. The template also shows how
to coordinate the ASP.NET Ajax and jQuery event models to insure your jQuery libraries
and custom code work as expected across all 3 page load scenarios (HTTP Get, Post,
and XML HTTP Request). Refer to this template any time you need to get a master or
content page setup from scratch to make use of jQuery.
</p>
        <p>
          <a href="http://www.mikeknowles.com/update-panel-template/">Live Demo</a>
        </p>
        <p>
          <a href="http://www.mikeknowles.com/download/update-panel-template.zip">Download the
source code and loading image</a>
        </p>
        <h3>ASPX
</h3>
        <pre class="brush: xml">&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="UpdatePanelTemplate_Default" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head runat="server"&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="jquery.blockUI.js"&gt;&lt;/script&gt;    
&lt;/head&gt;
&lt;body&gt;
    &lt;form id="form1" runat="server"&gt;    
    &lt;asp:ScriptManager ID="ScriptManager1" Runat="Server" /&gt;
    &lt;script type="text/javascript"&gt;
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);

        function pageLoaded(sender, args) {
            // Code in pageLoaded executes on initial page load and after any
            // subsequent regular or asynchronous postbacks.
            //console.log("pageLoaded");

            $(document).ready(function () {
                // Initialize jquery libraries on each page load and async postback.
                //console.log("in document.ready");
                $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
            });
        }
        
        function beginRequest(sender, args) {
            // Code inside of beginRequest runs at the start of each ASP.NET asynchronous
            // postback before any data has been sent to the server.
            //console.log("beginRequest");

            $('#Error').hide();

            $.blockUI({
                message: $('img#ajax-load'),
                css: { border: 'none',  background: 'none' }                 
            }); 
        }
        
        function endRequest(sender, args) {
            // Code inside of endRequest runs at the end of each ASP.NET asynchronous
            // postback after all data has been received from the server.
            //console.log("endRequest");

            // Display error message if async postback err'd out.
            if (args.get_error() != undefined) {
                $('#Error').show();
                args.set_errorHandled(true);
            }

            $.unblockUI();
        }
    &lt;/script&gt;

    &lt;div style="width:400px;margin:6px auto"&gt;
        &lt;p&gt;
            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
            incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
            exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
            irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
            pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
            deserunt mollit anim id est laborum.        
        &lt;/p&gt;

        &lt;asp:UpdatePanel ID="UpdatePanel1" runat="server"&gt;
            &lt;ContentTemplate&gt;
                &lt;asp:Button runat="server" ID="SubmitButton" Text="Submit (Async Postback)" /&gt;
                &amp;nbsp;&amp;nbsp;
                &lt;asp:Button runat="server" ID="ErrorDemoButton" Text="Submit (Async Error)" 
                    onclick="ErrorDemoButton_Click" /&gt;
                &lt;p&gt;
                    &lt;asp:Label ID="TimeLabel" runat="server" /&gt;
                &lt;/p&gt;
            &lt;/ContentTemplate&gt;
        &lt;/asp:UpdatePanel&gt;

        &lt;div id="Error" runat="server" clientidmode="Static" style="display:none"&gt;
            We are sorry, but an unexpected error occurred on the server. Please try your request again.
        &lt;/div&gt;

        &lt;img id="ajax-load" src="ajax-loader.gif" alt="Loading..." style="display:none" /&gt;
    &lt;/div&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
        <h3>Code-Behind
</h3>
        <pre class="brush: csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class UpdatePanelTemplate_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // TODO: delete block below - its here only to pause the page load 
        // long enough for the loading indicator to be visible to the user.
        if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack)
        {
            System.Threading.Thread.Sleep(4000);
            this.TimeLabel.Text = DateTime.Now.ToString();
        }
    }

    protected void ErrorDemoButton_Click(object sender, EventArgs e)
    {
        throw new Exception("error demo");
    }
}
</pre>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=5ad91aea-613a-4050-a161-2322ef4584c3" />
      </body>
      <title>ASP.NET Ajax and jQuery Development Template</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,5ad91aea-613a-4050-a161-2322ef4584c3.aspx</guid>
      <link>http://mikeknowles.com/blog/2010/08/15/ASPNETAjaxAndJQueryDevelopmentTemplate.aspx</link>
      <pubDate>Sun, 15 Aug 2010 03:03:12 GMT</pubDate>
      <description>&lt;p&gt;
Using jQuery with ASP.NET Ajax greatly extends the range of the .NET front-end developer.
The benefit of using jQuery is it allows you to perform client-side DOM operations
and include jQuery plugins in your site to gain increased interactivity without having
to become a JavaScript expert. 
&lt;/p&gt;
&lt;p&gt;
The code below provides a template for setting up an ASP.NET Ajax page with an UpdatePanel
that makes use of jQuery. The template shows how to include the jQuery library from
the Google CDN and to setup the core essentials of an Ajax page - a loading indicator
(using the BlockUI plugin) and the display of an error message when an exception is
thrown on the server during an asynchronous postback. The template also shows how
to coordinate the ASP.NET Ajax and jQuery event models to insure your jQuery libraries
and custom code work as expected across all 3 page load scenarios (HTTP Get, Post,
and XML HTTP Request). Refer to this template any time you need to get a master or
content page setup from scratch to make use of jQuery.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mikeknowles.com/update-panel-template/"&gt;Live Demo&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mikeknowles.com/download/update-panel-template.zip"&gt;Download the
source code and loading image&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;ASPX
&lt;/h3&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="UpdatePanelTemplate_Default" %&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;

&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;head runat="server"&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
    &amp;lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type="text/javascript" src="jquery.blockUI.js"&amp;gt;&amp;lt;/script&amp;gt;    
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;form id="form1" runat="server"&amp;gt;    
    &amp;lt;asp:ScriptManager ID="ScriptManager1" Runat="Server" /&amp;gt;
    &amp;lt;script type="text/javascript"&amp;gt;
        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);

        function pageLoaded(sender, args) {
            // Code in pageLoaded executes on initial page load and after any
            // subsequent regular or asynchronous postbacks.
            //console.log("pageLoaded");

            $(document).ready(function () {
                // Initialize jquery libraries on each page load and async postback.
                //console.log("in document.ready");
                $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
            });
        }
        
        function beginRequest(sender, args) {
            // Code inside of beginRequest runs at the start of each ASP.NET asynchronous
            // postback before any data has been sent to the server.
            //console.log("beginRequest");

            $('#Error').hide();

            $.blockUI({
                message: $('img#ajax-load'),
                css: { border: 'none',  background: 'none' }                 
            }); 
        }
        
        function endRequest(sender, args) {
            // Code inside of endRequest runs at the end of each ASP.NET asynchronous
            // postback after all data has been received from the server.
            //console.log("endRequest");

            // Display error message if async postback err'd out.
            if (args.get_error() != undefined) {
                $('#Error').show();
                args.set_errorHandled(true);
            }

            $.unblockUI();
        }
    &amp;lt;/script&amp;gt;

    &amp;lt;div style="width:400px;margin:6px auto"&amp;gt;
        &amp;lt;p&amp;gt;
            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor 
            incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
            exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
            irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
            pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
            deserunt mollit anim id est laborum.        
        &amp;lt;/p&amp;gt;

        &amp;lt;asp:UpdatePanel ID="UpdatePanel1" runat="server"&amp;gt;
            &amp;lt;ContentTemplate&amp;gt;
                &amp;lt;asp:Button runat="server" ID="SubmitButton" Text="Submit (Async Postback)" /&amp;gt;
                &amp;amp;nbsp;&amp;amp;nbsp;
                &amp;lt;asp:Button runat="server" ID="ErrorDemoButton" Text="Submit (Async Error)" 
                    onclick="ErrorDemoButton_Click" /&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;asp:Label ID="TimeLabel" runat="server" /&amp;gt;
                &amp;lt;/p&amp;gt;
            &amp;lt;/ContentTemplate&amp;gt;
        &amp;lt;/asp:UpdatePanel&amp;gt;

        &amp;lt;div id="Error" runat="server" clientidmode="Static" style="display:none"&amp;gt;
            We are sorry, but an unexpected error occurred on the server. Please try your request again.
        &amp;lt;/div&amp;gt;

        &amp;lt;img id="ajax-load" src="ajax-loader.gif" alt="Loading..." style="display:none" /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;h3&gt;Code-Behind
&lt;/h3&gt;
&lt;pre class="brush: csharp"&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class UpdatePanelTemplate_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // TODO: delete block below - its here only to pause the page load 
        // long enough for the loading indicator to be visible to the user.
        if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack)
        {
            System.Threading.Thread.Sleep(4000);
            this.TimeLabel.Text = DateTime.Now.ToString();
        }
    }

    protected void ErrorDemoButton_Click(object sender, EventArgs e)
    {
        throw new Exception("error demo");
    }
}
&lt;/pre&gt;&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=5ad91aea-613a-4050-a161-2322ef4584c3" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,5ad91aea-613a-4050-a161-2322ef4584c3.aspx</comments>
      <category>ASP.NET</category>
      <category>jQuery</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=aa5e79b7-b6b5-42f1-9571-0a29672fe515</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,aa5e79b7-b6b5-42f1-9571-0a29672fe515.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,aa5e79b7-b6b5-42f1-9571-0a29672fe515.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=aa5e79b7-b6b5-42f1-9571-0a29672fe515</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Many modern sites make use of two or three-state buttons to provide an added degree
of interactivity when navigating across pages or submitting a form. It’s possible
to create two and three state buttons using straight CSS or images. This article focuses
on using a type of image file referred to as a sprite sheet in combination with CSS
link styles to create ASP.NET HyperLink and LinkButton controls. Using the techniques
in this article you can create buttons that look like the following and interact with
them using standard ASP.NET controls:
</p>
        <p>
          <span class="spriteButton previous">
            <a href="">
            </a>
          </span>
          <span class="spriteButton next">
            <a href="">
            </a>
          </span>
        </p>
        <p>
          <a href="/three-state-button/Default.aspx" target="_blank">Click here to see the ASP.NET
Example Page</a>
        </p>
        <h2>What is a Sprite Sheet?
</h2>
        <p>
The term sprite sheet refers to an image file composed of multiple images, usually
with a transparent background and of type PNG or GIF. Sprite sheets were first used
in games to load many images into memory simultaneously to allow for fast switching.
Recently sprite sheets have come into usage on web pages due to the CSS background-image,
background-position, and background-repeat properties. Using the background properties,
we can load multiple images into 1 file and then use the background-position combined
with CSS width and height attributes to index to a specific “sub-image” within the
sprite sheet.
</p>
        <h2>Why Use Sprite Sheets?
</h2>
        <p>
Using sprite sheets to style image buttons means you can get fast switching between
states as the user mouses over and/or clicks the button without having to load the
image from the server (possibly causing a flicker) or having to resort to the now-outdated
technique of pre-loading images with JavaScript.
</p>
        <h2>Step 1: Create the Sprite Sheet
</h2>
        <p>
Naturally the first step is to have some type of image to work with. You can either
make the sprite sheet yourself, ask a designer to make one, or purchase pre-made images
from GraphicRiver.net or similar image sites. 
</p>
        <p>
A common pattern used to create button sprite sheets is to build one PNG per button
with each of the 3 states stacked on top of each other. If you are using PhotoShop
and the images were designed in this way, then you can slice each button out into
a transparent PNG. For this example I’ve created “Previous” and “Next” buttons <a href="http://graphicriver.net/item/web-elements-collection/44265" target="_blank">using
an image set I purchased from GraphicRiver.net</a>. Each column in the table below
shows the PNG file for the Previous button, and each column highlights a different
“sub-image” to demonstrate how the 3 states for Normal, Hover, and Active are stacked
on top of each other in the PNG sprite sheet. 
</p>
        <p>
The Normal, or “up” state sub-image in column 1 starts at position 0,0 and is 51 pixels
high and 186 pixels wide. The Hover, or “mouse-over” state sub-image in column 2 starts
at position 0,-66 and is also 51 pixels high and 186 pixels wide. The Active, or “clicked”
state sub-image in column 3 starts at position 0, –132 and is 51 pixels high and 186
pixels wide. 
</p>
        <table border="0" cellspacing="0" cellpadding="2">
          <tbody>
            <tr>
              <td valign="top" width="133">
                <span>Normal</span>
                <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/blog/content/binary/WindowsLiveWriter/UsingSpriteSheettosty.NETlinksandbuttons_AF3C/image_thumb_1.png" width="242" height="263" />
              </td>
              <td valign="top" width="133">
Hover<img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/blog/content/binary/WindowsLiveWriter/UsingSpriteSheettosty.NETlinksandbuttons_AF3C/image_thumb_3.png" width="242" height="262" /></td>
              <td valign="top" width="133">
Active<img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/blog/content/binary/WindowsLiveWriter/UsingSpriteSheettosty.NETlinksandbuttons_AF3C/image_thumb_4.png" width="243" height="262" /></td>
            </tr>
          </tbody>
        </table>
        <h2>Step 2: Create the Styles
</h2>
        <p>
Once you have the sprite sheet setup with the 3 images stacked we can define the CSS
styles for the images. Since the only thing that varies is where each image starts,
we can put most of the styles in the link element and then we only have to define
the unique starting position for the hover and active states. Finally we can define
a style for each unique image file that points to the sprite sheet and defines its
unique width: 
</p>
        <pre class="brush: css">.spriteButton a {
    background-position: 0 0;
    background-repeat: no-repeat;    
    height: 51px; 
    display: inline-block;
    outline: none;
}

.spriteButton a:hover {     
    background-position: -0px -66px;
    background-repeat: no-repeat;    
}

.spriteButton a:active { 
    background-position: -0px -132px;
    background-repeat: no-repeat;     
}

.next a {     
    background-image: url('/images/next.png'); 
    width: 145px; 
}

.previous a {     
    background-image: url('/images/previous.png'); 
    width: 186px; 
}
</pre>
        <p>
 
</p>
        <h2>Step 3: Write the ASP.NET Code
</h2>
        <p>
Having defined the styles, we can now use them as the class assignment for a span
tag that surrounds link elements. The code below is for the <a href="/three-state-button/Default.aspx" target="_blank">ASP.NET
example page</a> which shows normal href links and ASP.NET HyperLink and LinkButton
controls. Using a span instead of assigning the CSS class to the link or image works
better with the CSS background properties and across browsers. If you want some padding
above and below your image you could also use a div instead of a span.
</p>
        <h3>ASPX
</h3>
        <pre class="brush: xml">&lt;form id="form1" runat="server"&gt;
    &lt;h1&gt;Simple Links&lt;/h1&gt;
    &lt;p&gt;
            &lt;span class="spriteButton previous"&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/span&gt;    
            &lt;span class="spriteButton next"&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/span&gt;    
    &lt;/p&gt;    
    
    &lt;h1&gt;ASP.NET HyperLink and LinkButton Controls&lt;/h1&gt;
    &lt;p&gt;
        &lt;span class="spriteButton previous"&gt;
            &lt;asp:HyperLink NavigateUrl="" runat="server" /&gt;
        &lt;/span&gt;                    
        &lt;span class="spriteButton next"&gt;
            &lt;asp:LinkButton OnClick="NextButtonClick" runat="server" /&gt;        
        &lt;/span&gt;
    &lt;/p&gt;
&lt;/form&gt;
</pre>
        <h2>Code-Behind
</h2>
        <pre class="brush: csharp">    protected void NextButtonClick(object sender, EventArgs e)
    {
        // do something
    }
</pre>
        <p>
 
</p>
        <h2>References &amp; Tools
</h2>
        <p>
Hopefully this article will inspire you to take on creating sprite sheets the next
time you need to use image buttons in a project. Really the hardest part is creating
the image, after that the CSS is straightforward once you’ve gained an understanding
of the CSS background attributes. There’s a lot more that can be done with sprite
sheets then just simple buttons. Check out the tools and references listed below to
learn more.
</p>
        <p>
          <a href="http://csssprites.com/" target="_blank">CSS Sprites Generator</a>
        </p>
        <p>
          <a href="http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/" target="_blank">The
Mystery of CSS Sprites: Techniques, Tools And Tutorials [Smashing Magazine]</a>
        </p>
        <p>
          <a href="http://www.catnapgames.com/blog/202" target="_blank">Sprite Sheet Builder
1.0</a>
        </p>
        <p>
          <a href="http://www.tutorio.com/tutorial/pure-css-image-rollovers" target="_blank">Pure
CSS Image Rollovers</a>
        </p>
        <p>
          <a href="http://css-tricks.com/css-sprites/" target="_blank">CSS Sprites: What They
Are, Why They’re Cool, and How To Use Them</a>
        </p>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=aa5e79b7-b6b5-42f1-9571-0a29672fe515" />
      </body>
      <title>Implementing Three-State Image Buttons in ASP.NET Using Sprite Sheets and CSS</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,aa5e79b7-b6b5-42f1-9571-0a29672fe515.aspx</guid>
      <link>http://mikeknowles.com/blog/2010/02/15/ImplementingThreeStateImageButtonsInASPNETUsingSpriteSheetsAndCSS.aspx</link>
      <pubDate>Mon, 15 Feb 2010 20:01:04 GMT</pubDate>
      <description>&lt;p&gt;
Many modern sites make use of two or three-state buttons to provide an added degree
of interactivity when navigating across pages or submitting a form. It’s possible
to create two and three state buttons using straight CSS or images. This article focuses
on using a type of image file referred to as a sprite sheet in combination with CSS
link styles to create ASP.NET HyperLink and LinkButton controls. Using the techniques
in this article you can create buttons that look like the following and interact with
them using standard ASP.NET controls:
&lt;/p&gt;
&lt;p&gt;
&lt;span class="spriteButton previous"&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="spriteButton next"&gt;&lt;a href=""&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/three-state-button/Default.aspx" target="_blank"&gt;Click here to see the ASP.NET
Example Page&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;What is a Sprite Sheet?
&lt;/h2&gt;
&lt;p&gt;
The term sprite sheet refers to an image file composed of multiple images, usually
with a transparent background and of type PNG or GIF. Sprite sheets were first used
in games to load many images into memory simultaneously to allow for fast switching.
Recently sprite sheets have come into usage on web pages due to the CSS background-image,
background-position, and background-repeat properties. Using the background properties,
we can load multiple images into 1 file and then use the background-position combined
with CSS width and height attributes to index to a specific “sub-image” within the
sprite sheet.
&lt;/p&gt;
&lt;h2&gt;Why Use Sprite Sheets?
&lt;/h2&gt;
&lt;p&gt;
Using sprite sheets to style image buttons means you can get fast switching between
states as the user mouses over and/or clicks the button without having to load the
image from the server (possibly causing a flicker) or having to resort to the now-outdated
technique of pre-loading images with JavaScript.
&lt;/p&gt;
&lt;h2&gt;Step 1: Create the Sprite Sheet
&lt;/h2&gt;
&lt;p&gt;
Naturally the first step is to have some type of image to work with. You can either
make the sprite sheet yourself, ask a designer to make one, or purchase pre-made images
from GraphicRiver.net or similar image sites. 
&lt;/p&gt;
&lt;p&gt;
A common pattern used to create button sprite sheets is to build one PNG per button
with each of the 3 states stacked on top of each other. If you are using PhotoShop
and the images were designed in this way, then you can slice each button out into
a transparent PNG. For this example I’ve created “Previous” and “Next” buttons &lt;a href="http://graphicriver.net/item/web-elements-collection/44265" target="_blank"&gt;using
an image set I purchased from GraphicRiver.net&lt;/a&gt;. Each column in the table below
shows the PNG file for the Previous button, and each column highlights a different
“sub-image” to demonstrate how the 3 states for Normal, Hover, and Active are stacked
on top of each other in the PNG sprite sheet. 
&lt;/p&gt;
&lt;p&gt;
The Normal, or “up” state sub-image in column 1 starts at position 0,0 and is 51 pixels
high and 186 pixels wide. The Hover, or “mouse-over” state sub-image in column 2 starts
at position 0,-66 and is also 51 pixels high and 186 pixels wide. The Active, or “clicked”
state sub-image in column 3 starts at position 0, –132 and is 51 pixels high and 186
pixels wide. 
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="133"&gt;
&lt;span&gt;Normal&lt;/span&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/blog/content/binary/WindowsLiveWriter/UsingSpriteSheettosty.NETlinksandbuttons_AF3C/image_thumb_1.png" width="242" height="263"&gt;&lt;/td&gt;
&lt;td valign="top" width="133"&gt;
Hover&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/blog/content/binary/WindowsLiveWriter/UsingSpriteSheettosty.NETlinksandbuttons_AF3C/image_thumb_3.png" width="242" height="262"&gt;&lt;/td&gt;
&lt;td valign="top" width="133"&gt;
Active&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="/blog/content/binary/WindowsLiveWriter/UsingSpriteSheettosty.NETlinksandbuttons_AF3C/image_thumb_4.png" width="243" height="262"&gt;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Step 2: Create the Styles
&lt;/h2&gt;
&lt;p&gt;
Once you have the sprite sheet setup with the 3 images stacked we can define the CSS
styles for the images. Since the only thing that varies is where each image starts,
we can put most of the styles in the link element and then we only have to define
the unique starting position for the hover and active states. Finally we can define
a style for each unique image file that points to the sprite sheet and defines its
unique width: 
&lt;/p&gt;
&lt;pre class="brush: css"&gt;.spriteButton a {
    background-position: 0 0;
    background-repeat: no-repeat;    
    height: 51px; 
    display: inline-block;
    outline: none;
}

.spriteButton a:hover {     
    background-position: -0px -66px;
    background-repeat: no-repeat;    
}

.spriteButton a:active { 
    background-position: -0px -132px;
    background-repeat: no-repeat;     
}

.next a {     
    background-image: url('/images/next.png'); 
    width: 145px; 
}

.previous a {     
    background-image: url('/images/previous.png'); 
    width: 186px; 
}
&lt;/pre&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;Step 3: Write the ASP.NET Code
&lt;/h2&gt;
&lt;p&gt;
Having defined the styles, we can now use them as the class assignment for a span
tag that surrounds link elements. The code below is for the &lt;a href="/three-state-button/Default.aspx" target="_blank"&gt;ASP.NET
example page&lt;/a&gt; which shows normal href links and ASP.NET HyperLink and LinkButton
controls. Using a span instead of assigning the CSS class to the link or image works
better with the CSS background properties and across browsers. If you want some padding
above and below your image you could also use a div instead of a span.
&lt;/p&gt;
&lt;h3&gt;ASPX
&lt;/h3&gt;
&lt;pre class="brush: xml"&gt;&amp;lt;form id="form1" runat="server"&amp;gt;
    &amp;lt;h1&amp;gt;Simple Links&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;
            &amp;lt;span class="spriteButton previous"&amp;gt;&amp;lt;a href=""&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;    
            &amp;lt;span class="spriteButton next"&amp;gt;&amp;lt;a href=""&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;    
    &amp;lt;/p&amp;gt;    
    
    &amp;lt;h1&amp;gt;ASP.NET HyperLink and LinkButton Controls&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;span class="spriteButton previous"&amp;gt;
            &amp;lt;asp:HyperLink NavigateUrl="" runat="server" /&amp;gt;
        &amp;lt;/span&amp;gt;                    
        &amp;lt;span class="spriteButton next"&amp;gt;
            &amp;lt;asp:LinkButton OnClick="NextButtonClick" runat="server" /&amp;gt;        
        &amp;lt;/span&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;Code-Behind
&lt;/h2&gt;
&lt;pre class="brush: csharp"&gt;    protected void NextButtonClick(object sender, EventArgs e)
    {
        // do something
    }
&lt;/pre&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h2&gt;References &amp;amp; Tools
&lt;/h2&gt;
&lt;p&gt;
Hopefully this article will inspire you to take on creating sprite sheets the next
time you need to use image buttons in a project. Really the hardest part is creating
the image, after that the CSS is straightforward once you’ve gained an understanding
of the CSS background attributes. There’s a lot more that can be done with sprite
sheets then just simple buttons. Check out the tools and references listed below to
learn more.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://csssprites.com/" target="_blank"&gt;CSS Sprites Generator&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/" target="_blank"&gt;The
Mystery of CSS Sprites: Techniques, Tools And Tutorials [Smashing Magazine]&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.catnapgames.com/blog/202" target="_blank"&gt;Sprite Sheet Builder
1.0&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.tutorio.com/tutorial/pure-css-image-rollovers" target="_blank"&gt;Pure
CSS Image Rollovers&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://css-tricks.com/css-sprites/" target="_blank"&gt;CSS Sprites: What They
Are, Why They’re Cool, and How To Use Them&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=aa5e79b7-b6b5-42f1-9571-0a29672fe515" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,aa5e79b7-b6b5-42f1-9571-0a29672fe515.aspx</comments>
      <category>ASP.NET</category>
      <category>WebDesign</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=60fc17d8-a830-4c6b-b358-dea22e575909</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,60fc17d8-a830-4c6b-b358-dea22e575909.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,60fc17d8-a830-4c6b-b358-dea22e575909.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=60fc17d8-a830-4c6b-b358-dea22e575909</wfw:commentRss>
      <slash:comments>14</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Looking for an easier way to add a Flash file to a SharePoint content page? Download
and install the Flash WebPart SharePoint Solution and you will be able to add Flash
movies to your SharePoint web pages without having to edit any html code. Simply add
the Flash WebPart to a page, configure it in the WebPart editor by setting the movie
URL, width, and height, and you are good to go.
</p>
        <p>
          <a href="http://www.mikeknowles.com/Download/MikeKnowles.FlashWebPart.zip">Download
the Flash WebPart [MikeKnowles.FlashWebPart.zip]</a>
        </p>
        <h2>SharePoint 2007 Installation
</h2>
        <p>
1. Unzip FlashWebPart.MikeKnowles.zip
</p>
        <p>
2. Follow the instructions in Readme.txt to install the SharePoint solution to your
SharePoint farm.
</p>
        <p>
3. The installation will prompt you to optionally install the Flash WebPart feature
to one or more Site Collections. It's highly recommended that you deploy to the Site
Collections during the install process as its quicker then having to activate the
feature in each site individually.
</p>
        <h2>SharePoint 2010 Installation
</h2>
        <p>
          <a href="/sharepoint-flash-webpart/install-sharepoint-2010.aspx" target="_blank">Click
here</a> for SharePoint 2010 installation instructions.
</p>
        <h2>Using the Flash WebPart
</h2>
        <p>
1. If necessary, activate the Feature in the target Site Collection. If you installed
the Feature to the Site Collection when you ran the setup program above then you can
skip this step.
</p>
        <p>
2. Within the target Site Collection, open a SharePoint page which contains a WebPart
Zone and select: 
<br />
    Site Actions &gt; Edit Page
</p>
        <p>
3. Click to Add a Web Part, and select the SharePoint Flash WebPart as shown below:
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_6.png">
            <img style="border: 0px none; display: inline;" title="image" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_thumb_2.png" border="0" height="441" width="622" />
          </a>
        </p>
        <p>
4. Click Edit &gt; Modify Shared Part
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_8.png">
            <img style="border: 0px none; display: inline;" title="image" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_thumb_3.png" border="0" height="172" width="710" />
          </a>
        </p>
        <p>
5. Within the WebPart Editor, scroll down and click to open the Miscellaneous tab:
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_2.png">
            <img style="border: 0px none; display: inline;" title="image" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_thumb.png" border="0" height="728" width="266" />
          </a>
        </p>
        <p>
6. Enter the Flash URL, width, and height of your Flash Movie (SWF). Here are some
test values to get you started:
</p>
        <p>
Flash URL: <a title="http://kb2.adobe.com/cps/155/tn_15507/images/flashplayerversion1.swf" href="http://kb2.adobe.com/cps/155/tn_15507/images/flashplayerversion1.swf">http://kb2.adobe.com/cps/155/tn_15507/images/flashplayerversion1.swf</a><br />
Flash Width: 280<br />
Flash Height: 149 
</p>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=60fc17d8-a830-4c6b-b358-dea22e575909" />
      </body>
      <title>SharePoint Flash WebPart</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,60fc17d8-a830-4c6b-b358-dea22e575909.aspx</guid>
      <link>http://mikeknowles.com/blog/2010/01/10/SharePointFlashWebPart.aspx</link>
      <pubDate>Sun, 10 Jan 2010 14:59:32 GMT</pubDate>
      <description>&lt;p&gt;
Looking for an easier way to add a Flash file to a SharePoint content page? Download
and install the Flash WebPart SharePoint Solution and you will be able to add Flash
movies to your SharePoint web pages without having to edit any html code. Simply add
the Flash WebPart to a page, configure it in the WebPart editor by setting the movie
URL, width, and height, and you are good to go.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mikeknowles.com/Download/MikeKnowles.FlashWebPart.zip"&gt;Download
the Flash WebPart [MikeKnowles.FlashWebPart.zip]&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;SharePoint 2007 Installation
&lt;/h2&gt;
&lt;p&gt;
1. Unzip FlashWebPart.MikeKnowles.zip
&lt;/p&gt;
&lt;p&gt;
2. Follow the instructions in Readme.txt to install the SharePoint solution to your
SharePoint farm.
&lt;/p&gt;
&lt;p&gt;
3. The installation will prompt you to optionally install the Flash WebPart feature
to one or more Site Collections. It's highly recommended that you deploy to the Site
Collections during the install process as its quicker then having to activate the
feature in each site individually.
&lt;/p&gt;
&lt;h2&gt;SharePoint 2010 Installation
&lt;/h2&gt;
&lt;p&gt;
&lt;a href="/sharepoint-flash-webpart/install-sharepoint-2010.aspx" target="_blank"&gt;Click
here&lt;/a&gt; for SharePoint 2010 installation instructions.
&lt;/p&gt;
&lt;h2&gt;Using the Flash WebPart
&lt;/h2&gt;
&lt;p&gt;
1. If necessary, activate the Feature in the target Site Collection. If you installed
the Feature to the Site Collection when you ran the setup program above then you can
skip this step.
&lt;/p&gt;
&lt;p&gt;
2. Within the target Site Collection, open a SharePoint page which contains a WebPart
Zone and select: 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Site Actions &amp;gt; Edit Page
&lt;/p&gt;
&lt;p&gt;
3. Click to Add a Web Part, and select the SharePoint Flash WebPart as shown below:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_6.png"&gt;&lt;img style="border: 0px none; display: inline;" title="image" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_thumb_2.png" border="0" height="441" width="622"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
4. Click Edit &amp;gt; Modify Shared Part
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_8.png"&gt;&lt;img style="border: 0px none; display: inline;" title="image" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_thumb_3.png" border="0" height="172" width="710"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
5. Within the WebPart Editor, scroll down and click to open the Miscellaneous tab:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_2.png"&gt;&lt;img style="border: 0px none; display: inline;" title="image" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/SharePointFlashWebPart_11EAD/image_thumb.png" border="0" height="728" width="266"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
6. Enter the Flash URL, width, and height of your Flash Movie (SWF). Here are some
test values to get you started:
&lt;/p&gt;
&lt;p&gt;
Flash URL: &lt;a title="http://kb2.adobe.com/cps/155/tn_15507/images/flashplayerversion1.swf" href="http://kb2.adobe.com/cps/155/tn_15507/images/flashplayerversion1.swf"&gt;http://kb2.adobe.com/cps/155/tn_15507/images/flashplayerversion1.swf&lt;/a&gt;
&lt;br&gt;
Flash Width: 280&lt;br&gt;
Flash Height: 149 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=60fc17d8-a830-4c6b-b358-dea22e575909" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,60fc17d8-a830-4c6b-b358-dea22e575909.aspx</comments>
      <category>SharePoint</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=97e35612-0c3d-44f2-91eb-ea726b321a71</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,97e35612-0c3d-44f2-91eb-ea726b321a71.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,97e35612-0c3d-44f2-91eb-ea726b321a71.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=97e35612-0c3d-44f2-91eb-ea726b321a71</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently after installing Windows 7 and configuring Windows Backup to run weekly I
found that if system was not running due to a Power Management sleep that Windows
does not automatically wake-up to run the scheduled backup. This meant when I would
login the morning after the backup was scheduled to run that Windows would kick into
action and start the backup. Although I couldn't find instructions for this on the
tubes, it turns out to actually be quite easy to configure Windows 7 to wake-up automatically
for a scheduled backup.
</p>
        <p>
First you need to configure WindowsBackup to run on a schedule by following this Microsoft
guide:<br /><a href="http://windows.microsoft.com/en-us/windows7/Back-up-your-files">Back up your
files</a></p>
        <p>
After you've configured your backup schedule, open the Task Scheduler by clicking: 
<br />
    Start &gt; All Programs &gt; Accessories &gt; System Tools &gt;
Task Scheduler
</p>
        <p>
Within Task Scheduler, click to: 
<br />
    Task Scheduler &gt; Task Scheduler Library &gt; Microsoft &gt;
Windows &gt; WindowsBackup
</p>
        <p>
In the top-center window pane you should see a task titled AutomaticBackup that corresponds
to the backup schedule item you created. Right-click AutomaticBackup and select the
Properties menu item.
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_thumb.png" width="565" height="122" />
          </a>
        </p>
        <p>
In the Properties Window, click the Conditions tab and then check the box titled <b>Wake
the computer to run this task</b>.
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_thumb_1.png" width="650" height="490" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Click OK and it's a done deal.
</p>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=97e35612-0c3d-44f2-91eb-ea726b321a71" />
      </body>
      <title>Configure Windows 7 to Wake-Up for Windows Backup</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,97e35612-0c3d-44f2-91eb-ea726b321a71.aspx</guid>
      <link>http://mikeknowles.com/blog/2010/01/09/ConfigureWindows7ToWakeUpForWindowsBackup.aspx</link>
      <pubDate>Sat, 09 Jan 2010 19:17:32 GMT</pubDate>
      <description>&lt;p&gt;
Recently after installing Windows 7 and configuring Windows Backup to run weekly I
found that if system was not running due to a Power Management sleep that Windows
does not automatically wake-up to run the scheduled backup. This meant when I would
login the morning after the backup was scheduled to run that Windows would kick into
action and start the backup. Although I couldn't find instructions for this on the
tubes, it turns out to actually be quite easy to configure Windows 7 to wake-up automatically
for a scheduled backup.
&lt;/p&gt;
&lt;p&gt;
First you need to configure WindowsBackup to run on a schedule by following this Microsoft
guide:&lt;br&gt;
&lt;a href="http://windows.microsoft.com/en-us/windows7/Back-up-your-files"&gt;Back up your
files&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
After you've configured your backup schedule, open the Task Scheduler by clicking: 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Start &amp;gt; All Programs &amp;gt; Accessories &amp;gt; System Tools &amp;gt;
Task Scheduler
&lt;/p&gt;
&lt;p&gt;
Within Task Scheduler, click to: 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Task Scheduler &amp;gt; Task Scheduler Library &amp;gt; Microsoft &amp;gt;
Windows &amp;gt; WindowsBackup
&lt;/p&gt;
&lt;p&gt;
In the top-center window pane you should see a task titled AutomaticBackup that corresponds
to the backup schedule item you created. Right-click AutomaticBackup and select the
Properties menu item.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_thumb.png" width="565" height="122"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In the Properties Window, click the Conditions tab and then check the box titled &lt;b&gt;Wake
the computer to run this task&lt;/b&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/ConfigureWindows7toWakeUpforWindowsDefra_BA6E/image_thumb_1.png" width="650" height="490"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Click OK and it's a done deal.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=97e35612-0c3d-44f2-91eb-ea726b321a71" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,97e35612-0c3d-44f2-91eb-ea726b321a71.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=a1735434-e711-4cb9-8c18-22d9b44053d6</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,a1735434-e711-4cb9-8c18-22d9b44053d6.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,a1735434-e711-4cb9-8c18-22d9b44053d6.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a1735434-e711-4cb9-8c18-22d9b44053d6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This article describes how to develop a single EXE file for installation and deployment
of a SharePoint solution to a Windows SharePoint Services or SharePoint Server farm.
The single EXE file can also be used for installation repair and removal. Using the
approach outlined in this article can simplify the distribution and installation of
your SharePoint code – no more archives to extract, lengthy manual SharePoint admin
screens to document and navigate or scripts to run – just a single EXE file to download
and execute. 
</p>
        <p>
Note: Distribution of an application using the techniques described in this article
requires the purchase of WinZip Pro and WinZip Self-Extractor. As of 10/25/09 these
products retailed for $49.95 each on <a href="http://winzip.com" target="_blank">winzip.com</a>. 
</p>
        <h1>Develop and Deploy Using SharePoint Solution Packages
</h1>
        <p>
The most important step and the one that takes the longest to master is to develop
all code and assets to be deployed to SharePoint as one or more Features deployed
as a SharePoint Solution Package (*.wsp). Much has been written online and in books
on how to develop SharePoint Features and Solutions. If you are new to these topics
or in need of a refresher, check out the oft-referenced Ted Pattison Office Space
columns:
</p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/magazine/cc163428.aspx" target="_blank">Features
for SharePoint</a>
        </p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/magazine/cc163379.aspx" target="_blank">Solution
Deployment with SharePoint 2007</a>
        </p>
        <h1>Download and Install the CodePlex SharePoint Solution Installer
</h1>
        <p>
The <a href="http://sharepointinstaller.codeplex.com/" target="_blank">SharePoint
Solution Installer</a> is a free download from CodePlex licensed under the Microsoft
Permissive License (Ms-PL) meaning you may use it to build and distribute commercial
software without having to purchase a license or pay royalties (disclaimer: I am not
a lawyer, you should verify the applicability of the Ms-PL to your project by consulting
a legal professional). 
</p>
        <h1>Download and Install WinZip Pro, Self-Extractor, and the Command Line Add-on
</h1>
        <p>
Many commercial software products make use of WinZip to deliver and install their
software. Our approach is to use WinZip to package up the multiple files required
to execute the CodePlex SharePoint Solution Installer. You may download and install
the trial versions of WinZip Pro and Self-Extractor to complete the demo, however
you will need to purchase licenses prior to deploying software with WinZip.
</p>
        <p>
          <a href="http://www.winzip.com/downwz.htm" target="_blank">WinZip Pro Download</a>
        </p>
        <p>
          <a href="http://www.winzip.com/downse.htm" target="_blank">WinZip Self-Extractor Download</a>
        </p>
        <p>
          <a href="http://www.winzip.com/downcl.htm" target="_blank">WinZip Command-Line Add-on
Download</a>
        </p>
        <h1>Create a Build Directory
</h1>
        <p>
The build directory is where we will package up all the files required to build the
single installation EXE. This will include the SharePoint Solution Package, application
icon, license agreement, the SharePoint Solution Installer Setup.exe and configuration
file, and various text files for the WinZip installer. You can learn more about the
SharePoint Solution Installer configuration file on the <a href="http://sharepointinstaller.codeplex.com/" target="_blank">product
download site</a>. The WinZip installer options are detailed in the product help file
under the topic <a href="http://help.soft30.com/doc/winzip/source/source/commandlineoptions.htm" target="_blank">Command
Line Options</a>. For a complete, working example download and extract <a href="http://mikeknowles.com/download/SharePointSingleFileSetup.zip">http://mikeknowles.com/download/SharePointSingleFileSetup.zip</a> and
navigate to the Build folder:
</p>
        <p>
 
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_2.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="154" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb.png" width="147" border="0" />
          </a> 
</p>
        <h1>Create a Build Script
</h1>
        <p>
Open the build.bat included in the example download. In line 4, the build script zips
up the files required by the SharePoint Solution Installer. Line 6 packages several
files for display in the WinZip-based installer and then directs WinZip to execute
the SharePoint Solution Installer Setup.exe after extracting all the files. The end
result will be an executable with the same name as the zip file (Demo.exe) which is
then copied to the parent directory in line 7. The Demo.exe file now contains all
files required for a professional-quality installation.
</p>
        <pre class="c#" name="code">@echo off
del Demo.zip
del ..\Demo.exe
"c:\program files\winzip\wzzip" -o Demo.zip DemoSolution.wsp EULA.rtf Setup.exe Setup.exe.config application.ico
If ErrorLevel 1 Goto Exit
"C:\Program Files\WinZip Self-Extractor\WZIPSE32.EXE" -o Demo.zip -t WinZipMainDialog.txt -i application.ico -a AboutDialogExtra.txt -setup -c Setup.exe
move /Y Demo.exe ../
Goto Exit
:Exit
pause;
</pre>
        <!--CRLF-->
        <h1>Run the Installation Program
</h1>
        <p>
The setup file (Demo.exe) must be run while logged into one of the SharePoint Farm
servers as a user with Central Administration rights. A common approach is to maintain
one account which all SharePoint processes run-as and then perform all SharePoint
installations logged into the server as that user. If you try to run the setup program
on a Windows XP or Vista computer or a server without SharePoint installed, the program
will crash as the SharePoint Solution Installer is unable to initialize. After the
program has been installed you can run the Demo.exe program again at which time after
running through it’s status checks it will prompt you to repair or remove the installation.
</p>
        <p>
 
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_4.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="207" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_1.png" width="421" border="0" />
          </a> 
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_6.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="430" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_2.png" width="550" border="0" />
          </a>
        </p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_10.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="433" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_4.png" width="550" border="0" />
          </a>
        </p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_12.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="433" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_5.png" width="550" border="0" />
          </a>
        </p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_14.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="433" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_6.png" width="550" border="0" />
          </a>
        </p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_20.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="433" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_9.png" width="550" border="0" />
          </a>
        </p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_22.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="433" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_10.png" width="550" border="0" />
          </a>
        </p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_24.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="433" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_11.png" width="550" border="0" />
          </a>
        </p>
        <p>
 
</p>
        <h1>Going Beyond the Basics
</h1>
        <p>
You may choose to include a short Readme.txt file in a zip file with the executable
as the download for your customers. This provides users with a local file reference
for the installation as well as any other useful information in the Readme.txt file
such as your website and additional support links and contacts. 
</p>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=a1735434-e711-4cb9-8c18-22d9b44053d6" />
      </body>
      <title>Building a SharePoint Solution Setup.exe</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,a1735434-e711-4cb9-8c18-22d9b44053d6.aspx</guid>
      <link>http://mikeknowles.com/blog/2009/10/26/BuildingASharePointSolutionSetupexe.aspx</link>
      <pubDate>Mon, 26 Oct 2009 13:00:00 GMT</pubDate>
      <description>&lt;p&gt;
This article describes how to develop a single EXE file for installation and deployment
of a SharePoint solution to a Windows SharePoint Services or SharePoint Server farm.
The single EXE file can also be used for installation repair and removal. Using the
approach outlined in this article can simplify the distribution and installation of
your SharePoint code – no more archives to extract, lengthy manual SharePoint admin
screens to document and navigate or scripts to run – just a single EXE file to download
and execute. 
&lt;/p&gt;
&lt;p&gt;
Note: Distribution of an application using the techniques described in this article
requires the purchase of WinZip Pro and WinZip Self-Extractor. As of 10/25/09 these
products retailed for $49.95 each on &lt;a href="http://winzip.com" target=_blank&gt;winzip.com&lt;/a&gt;. 
&lt;/p&gt;
&lt;h1&gt;Develop and Deploy Using SharePoint Solution Packages
&lt;/h1&gt;
&lt;p&gt;
The most important step and the one that takes the longest to master is to develop
all code and assets to be deployed to SharePoint as one or more Features deployed
as a SharePoint Solution Package (*.wsp). Much has been written online and in books
on how to develop SharePoint Features and Solutions. If you are new to these topics
or in need of a refresher, check out the oft-referenced Ted Pattison Office Space
columns:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163428.aspx" target=_blank&gt;Features
for SharePoint&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163379.aspx" target=_blank&gt;Solution
Deployment with SharePoint 2007&lt;/a&gt;
&lt;/p&gt;
&lt;h1&gt;Download and Install the CodePlex SharePoint Solution Installer
&lt;/h1&gt;
&lt;p&gt;
The &lt;a href="http://sharepointinstaller.codeplex.com/" target=_blank&gt;SharePoint Solution
Installer&lt;/a&gt; is a free download from CodePlex licensed under the Microsoft Permissive
License (Ms-PL) meaning you may use it to build and distribute commercial software
without having to purchase a license or pay royalties (disclaimer: I am not a lawyer,
you should verify the applicability of the Ms-PL to your project by consulting a legal
professional). 
&lt;/p&gt;
&lt;h1&gt;Download and Install WinZip Pro, Self-Extractor, and the Command Line Add-on
&lt;/h1&gt;
&lt;p&gt;
Many commercial software products make use of WinZip to deliver and install their
software. Our approach is to use WinZip to package up the multiple files required
to execute the CodePlex SharePoint Solution Installer. You may download and install
the trial versions of WinZip Pro and Self-Extractor to complete the demo, however
you will need to purchase licenses prior to deploying software with WinZip.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.winzip.com/downwz.htm" target=_blank&gt;WinZip Pro Download&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.winzip.com/downse.htm" target=_blank&gt;WinZip Self-Extractor Download&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.winzip.com/downcl.htm" target=_blank&gt;WinZip Command-Line Add-on
Download&lt;/a&gt;
&lt;/p&gt;
&lt;h1&gt;Create a Build Directory
&lt;/h1&gt;
&lt;p&gt;
The build directory is where we will package up all the files required to build the
single installation EXE. This will include the SharePoint Solution Package, application
icon, license agreement, the SharePoint Solution Installer Setup.exe and configuration
file, and various text files for the WinZip installer. You can learn more about the
SharePoint Solution Installer configuration file on the &lt;a href="http://sharepointinstaller.codeplex.com/" target=_blank&gt;product
download site&lt;/a&gt;. The WinZip installer options are detailed in the product help file
under the topic &lt;a href="http://help.soft30.com/doc/winzip/source/source/commandlineoptions.htm" target=_blank&gt;Command
Line Options&lt;/a&gt;. For a complete, working example download and extract &lt;a href="http://mikeknowles.com/download/SharePointSingleFileSetup.zip"&gt;http://mikeknowles.com/download/SharePointSingleFileSetup.zip&lt;/a&gt; and
navigate to the Build folder:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_2.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=154 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb.png" width=147 border=0&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h1&gt;Create a Build Script
&lt;/h1&gt;
&lt;p&gt;
Open the build.bat included in the example download. In line 4, the build script zips
up the files required by the SharePoint Solution Installer. Line 6 packages several
files for display in the WinZip-based installer and then directs WinZip to execute
the SharePoint Solution Installer Setup.exe after extracting all the files. The end
result will be an executable with the same name as the zip file (Demo.exe) which is
then copied to the parent directory in line 7. The Demo.exe file now contains all
files required for a professional-quality installation.
&lt;/p&gt;
&lt;pre class=c# name="code"&gt;@echo off
del Demo.zip
del ..\Demo.exe
"c:\program files\winzip\wzzip" -o Demo.zip DemoSolution.wsp EULA.rtf Setup.exe Setup.exe.config application.ico
If ErrorLevel 1 Goto Exit
"C:\Program Files\WinZip Self-Extractor\WZIPSE32.EXE" -o Demo.zip -t WinZipMainDialog.txt -i application.ico -a AboutDialogExtra.txt -setup -c Setup.exe
move /Y Demo.exe ../
Goto Exit
:Exit
pause;
&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;h1&gt;Run the Installation Program
&lt;/h1&gt;
&lt;p&gt;
The setup file (Demo.exe) must be run while logged into one of the SharePoint Farm
servers as a user with Central Administration rights. A common approach is to maintain
one account which all SharePoint processes run-as and then perform all SharePoint
installations logged into the server as that user. If you try to run the setup program
on a Windows XP or Vista computer or a server without SharePoint installed, the program
will crash as the SharePoint Solution Installer is unable to initialize. After the
program has been installed you can run the Demo.exe program again at which time after
running through it’s status checks it will prompt you to repair or remove the installation.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_4.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=207 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_1.png" width=421 border=0&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_6.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=430 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_2.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_10.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_4.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_12.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_5.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_14.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_6.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_20.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_9.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_22.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_10.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_24.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=433 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/BuildingaSharePointSolutionSetup.exe_123C5/image_thumb_11.png" width=550 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h1&gt;Going Beyond the Basics
&lt;/h1&gt;
&lt;p&gt;
You may choose to include a short Readme.txt file in a zip file with the executable
as the download for your customers. This provides users with a local file reference
for the installation as well as any other useful information in the Readme.txt file
such as your website and additional support links and contacts. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=a1735434-e711-4cb9-8c18-22d9b44053d6" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,a1735434-e711-4cb9-8c18-22d9b44053d6.aspx</comments>
      <category>SharePoint</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=f177c2f1-d089-421e-8cbb-ab5a8d853078</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,f177c2f1-d089-421e-8cbb-ab5a8d853078.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,f177c2f1-d089-421e-8cbb-ab5a8d853078.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f177c2f1-d089-421e-8cbb-ab5a8d853078</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tried to register a domain name lately? It’s getting tough to come up with a reasonably
short and usable name in the .com domain that’s not taken. This post details the most
useful resources I came across when recently trying to come up with a new name.
</p>
        <h1>Think About the Big Picture of Selecting a Domain Name
</h1>
        <p>
Most good names are taken. Where do you start trying to come up with a new name? 
</p>
        <p>
 
</p>
        <p>
Read <a href="http://www.dotomator.com/tips.html" target="_blank">Dot-o-mator Choosing
a Good Domain Name</a></p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_18.png">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_thumb_8.png" border="0" height="206" width="777" />
          </a>
        </p>
        <p>
 
</p>
        <p>
Read posts on <a href="http://www.thenameinspector.com/" target="_blank">The Name
Inspector</a></p>
        <p>
          <a href="http://www.thenameinspector.com/">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_25.png" border="0" height="142" width="761" />
          </a>
        </p>
        <p>
 
</p>
        <p>
Scroll Down and find the listing of “Big Picture Posts” on the right navigation. Click
to read each article. 
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_14.png">
            <img title="image" style="border: 0px none ; display: inline; margin-left: 0px; margin-right: 0px;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_thumb_6.png" border="0" height="141" width="177" />
          </a>
        </p>
        <p>
 
</p>
        <p>
Likewise, scroll to the Names section and read the review of each name.
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_12.png">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_thumb_5.png" border="0" height="202" width="87" />
          </a>
        </p>
        <p>
 
</p>
        <p>
Read Firewheel Design’s <a href="http://firewheeldesign.com/sparkplug/2005/December/four_concentric_circles_of_a_web_20_name.php" target="_blank">Four
Concentric Circles of a Web 2.0 Name</a></p>
        <p>
          <a href="http://firewheeldesign.com/sparkplug/2005/December/four_concentric_circles_of_a_web_20_name.php">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_26.png" border="0" height="211" width="740" />
          </a>
        </p>
        <h1>Domain Selection Helper Sites
</h1>
        <p>
Back in the day when the 56k US Robotics modem was the gold standard for home internet
connectivity, we would find domain names by going to the Network Solutions website
and typing the name we wanted into a form, submit it, and then wait 5, 10, 15 seconds
or more to see if it was available. Nowadays there are many sites that will help you
generate word combinations and allow you to type in a name and give you instant feedback
if that name is available. Googling on “domain name generator” will give you an idea
of the range of tools out there – the list below is what I found most useful after
trying out many others.
</p>
        <p>
 
</p>
        <p>
          <a href="http://domaintyper.com/" target="_blank">DomainTyper</a> has the best Web
2.0 Domain Name Generator and the quickest response times for checking availability
as you type. For my fellow SEO geeks, the site also has a similar instant feedback
page for checking Page Rank on Google, Alexa, and others.
</p>
        <p>
          <a href="http://domaintyper.com/">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_27.png" border="0" height="506" width="589" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <a href="http://domaintyper.com/">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_28.png" border="0" height="332" width="614" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <a href="http://www.pcnames.com/" target="_blank">PCNames</a> is similar to DomainTyper,
the only feature it has DomainTyper does not is the Word Suggestion tool which is
like a mini-thesaurus
</p>
        <p>
          <a href="http://www.pcnames.com/">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_29.png" border="0" height="468" width="713" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <a href="http://www.nameboy.com/" target="_blank">Nameboy</a> generates name candidates
based on your keywords. There are a lot of sites that do this, I found Nameboy to
be the most contextual, many of the other sites seem to just string random words together
without any real context association.
</p>
        <p>
          <a href="http://www.nameboy.com/">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_30.png" border="0" height="626" width="762" />
          </a>
        </p>
        <h1>So you found a Great Name? Sorry, you’re not done yet.
</h1>
        <h2>
          <strong>
            <font color="#0080c0">1. Do a Google Search</font>
          </strong>
        </h2>
        <p>
What you are doing here is a quick check to see if there are existing companies which
might use your name in some way or if there are any negative or positive connotations
associated with your name. Enter the name you found on Google – once as the name itself
and once with the words separated. You want to avoid picking a name that might have
negative connotations or images in the search results that you would not want associated
with the image you are trying to portray. Would you want your potential customers
seeing your name mixed in with these search results? Does another company obviously
have rights to this name within your industry? How likely is it your site would show
up in the first page of Google search results? 
</p>
        <h1>2. Do an Online Trademark Search
</h1>
        <p>
Disclaimer: I am not a lawyer, this is not legal advice.
</p>
        <p>
Next, do a US Patent and Trademark Office <a href="http://tess2.uspto.gov/bin/gate.exe?f=searchss&amp;state=4009:5ultn5.1.1" target="_blank">Trademark
Search</a> to see if any companies have a legal claim to your name or terms very similar
to your name. Enter your name both with and without spaces. This will not tell if
you would be able to trademark or copyright something, but it gives you a pretty good
indication if something is already trademarked. There is no point in registering a
domain name with an obviously trademarked or copyrighted name or term as you would
probably get a Cease and Desist Order should your site gain any traffic. Keep in mind
that a difference of one or two characters may or may not mean your name would be
considered distinct – the only way you can find out for sure is by applying for a
trademark. The general rule of thumb on trademarks is you can probably use a name
if it’s trademarked by a company in an industry other then your own and it’s not in
such widespread use that you would obviously be stealing their name (e.g. you can’t
have a company called Coca-Cola Software). However you would still be competing against
that company in Google Search Results, so if your name is the same or similar to something
already trademarked then you will probably want to keep looking until you find something
unique. 
</p>
        <p>
Again, I am not a lawyer, so you should consider everything I just said to be completely
false and unreliable.
</p>
        <p>
 
</p>
        <p>
As an example of what a trademark search looks like, here’s what you get when checking
the term “google”:
</p>
        <p>
 
</p>
        <p>
          <a href="http://tess2.uspto.gov/bin/gate.exe?f=searchss&amp;state=4009:5ultn5.1.1">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_31.png" border="0" height="434" width="544" />
          </a>
        </p>
        <p>
 
</p>
        <p>
          <a href="http://tess2.uspto.gov/bin/gate.exe?f=searchss&amp;state=4009:5ultn5.1.1">
            <img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_32.png" border="0" height="272" width="642" />
          </a> 
</p>
        <h1>Final Words
</h1>
        <p>
No matter how great a name you think you’ve found, follow these steps before you buy
it to save yourself from morning-after regret when you’ve purchased a name you don’t
really like:
</p>
        <p>
1. Say it out loud
</p>
        <p>
2. Run it by family members or friends
</p>
        <p>
3. Sleep on it - Wait until the next morning before you buy it
</p>
        <p>
4. If you do register it, do so for one year only and don’t buy any extras until you
are sure you are going to keep the name.
</p>
        <p>
5. Wait a few days before you setup a hosting site or buy an SSL certificate to make
sure you still like it before you spend any money.
</p>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=f177c2f1-d089-421e-8cbb-ab5a8d853078" />
      </body>
      <title>Resources for Finding a Domain Name</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,f177c2f1-d089-421e-8cbb-ab5a8d853078.aspx</guid>
      <link>http://mikeknowles.com/blog/2009/09/24/ResourcesForFindingADomainName.aspx</link>
      <pubDate>Thu, 24 Sep 2009 21:00:00 GMT</pubDate>
      <description>&lt;p&gt;
Tried to register a domain name lately? It’s getting tough to come up with a reasonably
short and usable name in the .com domain that’s not taken. This post details the most
useful resources I came across when recently trying to come up with a new name.
&lt;/p&gt;
&lt;h1&gt;Think About the Big Picture of Selecting a Domain Name
&lt;/h1&gt;
&lt;p&gt;
Most good names are taken. Where do you start trying to come up with a new name? 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Read &lt;a href="http://www.dotomator.com/tips.html" target="_blank"&gt;Dot-o-mator Choosing
a Good Domain Name&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_18.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_thumb_8.png" border="0" height="206" width="777"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Read posts on &lt;a href="http://www.thenameinspector.com/" target="_blank"&gt;The Name
Inspector&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.thenameinspector.com/"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_25.png" border="0" height="142" width="761"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Scroll Down and find the listing of “Big Picture Posts” on the right navigation. Click
to read each article. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_14.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline; margin-left: 0px; margin-right: 0px;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_thumb_6.png" border="0" height="141" width="177"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Likewise, scroll to the Names section and read the review of each name.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_12.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_thumb_5.png" border="0" height="202" width="87"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Read Firewheel Design’s &lt;a href="http://firewheeldesign.com/sparkplug/2005/December/four_concentric_circles_of_a_web_20_name.php" target="_blank"&gt;Four
Concentric Circles of a Web 2.0 Name&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://firewheeldesign.com/sparkplug/2005/December/four_concentric_circles_of_a_web_20_name.php"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_26.png" border="0" height="211" width="740"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h1&gt;Domain Selection Helper Sites
&lt;/h1&gt;
&lt;p&gt;
Back in the day when the 56k US Robotics modem was the gold standard for home internet
connectivity, we would find domain names by going to the Network Solutions website
and typing the name we wanted into a form, submit it, and then wait 5, 10, 15 seconds
or more to see if it was available. Nowadays there are many sites that will help you
generate word combinations and allow you to type in a name and give you instant feedback
if that name is available. Googling on “domain name generator” will give you an idea
of the range of tools out there – the list below is what I found most useful after
trying out many others.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://domaintyper.com/" target="_blank"&gt;DomainTyper&lt;/a&gt; has the best Web
2.0 Domain Name Generator and the quickest response times for checking availability
as you type. For my fellow SEO geeks, the site also has a similar instant feedback
page for checking Page Rank on Google, Alexa, and others.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://domaintyper.com/"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_27.png" border="0" height="506" width="589"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://domaintyper.com/"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_28.png" border="0" height="332" width="614"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.pcnames.com/" target="_blank"&gt;PCNames&lt;/a&gt; is similar to DomainTyper,
the only feature it has DomainTyper does not is the Word Suggestion tool which is
like a mini-thesaurus
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.pcnames.com/"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_29.png" border="0" height="468" width="713"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nameboy.com/" target="_blank"&gt;Nameboy&lt;/a&gt; generates name candidates
based on your keywords. There are a lot of sites that do this, I found Nameboy to
be the most contextual, many of the other sites seem to just string random words together
without any real context association.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nameboy.com/"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_30.png" border="0" height="626" width="762"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h1&gt;So you found a Great Name? Sorry, you’re not done yet.
&lt;/h1&gt;
&lt;h2&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;1. Do a Google Search&lt;/font&gt;&lt;/strong&gt;
&lt;/h2&gt;
&lt;p&gt;
What you are doing here is a quick check to see if there are existing companies which
might use your name in some way or if there are any negative or positive connotations
associated with your name. Enter the name you found on Google – once as the name itself
and once with the words separated. You want to avoid picking a name that might have
negative connotations or images in the search results that you would not want associated
with the image you are trying to portray. Would you want your potential customers
seeing your name mixed in with these search results? Does another company obviously
have rights to this name within your industry? How likely is it your site would show
up in the first page of Google search results? 
&lt;/p&gt;
&lt;h1&gt;2. Do an Online Trademark Search
&lt;/h1&gt;
&lt;p&gt;
Disclaimer: I am not a lawyer, this is not legal advice.
&lt;/p&gt;
&lt;p&gt;
Next, do a US Patent and Trademark Office &lt;a href="http://tess2.uspto.gov/bin/gate.exe?f=searchss&amp;amp;state=4009:5ultn5.1.1" target="_blank"&gt;Trademark
Search&lt;/a&gt; to see if any companies have a legal claim to your name or terms very similar
to your name. Enter your name both with and without spaces. This will not tell if
you would be able to trademark or copyright something, but it gives you a pretty good
indication if something is already trademarked. There is no point in registering a
domain name with an obviously trademarked or copyrighted name or term as you would
probably get a Cease and Desist Order should your site gain any traffic. Keep in mind
that a difference of one or two characters may or may not mean your name would be
considered distinct – the only way you can find out for sure is by applying for a
trademark. The general rule of thumb on trademarks is you can probably use a name
if it’s trademarked by a company in an industry other then your own and it’s not in
such widespread use that you would obviously be stealing their name (e.g. you can’t
have a company called Coca-Cola Software). However you would still be competing against
that company in Google Search Results, so if your name is the same or similar to something
already trademarked then you will probably want to keep looking until you find something
unique. 
&lt;/p&gt;
&lt;p&gt;
Again, I am not a lawyer, so you should consider everything I just said to be completely
false and unreliable.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
As an example of what a trademark search looks like, here’s what you get when checking
the term “google”:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://tess2.uspto.gov/bin/gate.exe?f=searchss&amp;amp;state=4009:5ultn5.1.1"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_31.png" border="0" height="434" width="544"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://tess2.uspto.gov/bin/gate.exe?f=searchss&amp;amp;state=4009:5ultn5.1.1"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/DomainNameResources_12755/image_32.png" border="0" height="272" width="642"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h1&gt;Final Words
&lt;/h1&gt;
&lt;p&gt;
No matter how great a name you think you’ve found, follow these steps before you buy
it to save yourself from morning-after regret when you’ve purchased a name you don’t
really like:
&lt;/p&gt;
&lt;p&gt;
1. Say it out loud
&lt;/p&gt;
&lt;p&gt;
2. Run it by family members or friends
&lt;/p&gt;
&lt;p&gt;
3. Sleep on it - Wait until the next morning before you buy it
&lt;/p&gt;
&lt;p&gt;
4. If you do register it, do so for one year only and don’t buy any extras until you
are sure you are going to keep the name.
&lt;/p&gt;
&lt;p&gt;
5. Wait a few days before you setup a hosting site or buy an SSL certificate to make
sure you still like it before you spend any money.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=f177c2f1-d089-421e-8cbb-ab5a8d853078" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,f177c2f1-d089-421e-8cbb-ab5a8d853078.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=b257a3d7-ff65-4694-9d9d-5e79b4e703af</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,b257a3d7-ff65-4694-9d9d-5e79b4e703af.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,b257a3d7-ff65-4694-9d9d-5e79b4e703af.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b257a3d7-ff65-4694-9d9d-5e79b4e703af</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx" target="_blank">ASP.NET
Profile Properties</a> provide a convenient way to store application and user-specific
preferences and personalization choices without having to write a lot of code to manage
the back-end data storage and retrieval. The ASP.NET <a href="http://msdn.microsoft.com/en-us/library/x28wfk74.aspx" target="_blank">Application
Services Database</a> SqlProfileProvider can be leveraged to store and retrieve the
Profile settings in a SQL Express or SQL Server database. The <a href="http://msdn.microsoft.com/en-us/library/system.web.profile.sqlprofileprovider.aspx" target="_blank">SqlProfileProvider</a> will
manage the storage of user-specific settings by login name for both forms-based and
Windows authentication applications (anonymous user data can be stored in cookies
if enabled).
</p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/ms548160.aspx" target="_blank">SharePoint
2007 provides an extensive personalization model</a> with it’s own set of management
user interfaces and APIs. If your SharePoint site is based on Windows Authentication
then SharePoint <a href="http://msdn.microsoft.com/en-us/library/ms543640.aspx" target="_blank">User
Profile Properties</a> are available for storing user-specific data provided personalization
has been enabled for the farm and the personalization items have been setup in SharePoint
and/or Active Directory. 
</p>
        <p>
In certain circumstances functionality being developed for deployment to SharePoint
may still need to make use of ASP.NET SQL Server profiles instead of SharePoint user
profiles. Some examples of when this might occur:
</p>
        <ol>
          <li>
SharePoint personalization has not yet been configured and enabled or an organization
has decided not to enable the personalization system and only a few user-specific
properties need to stored. 
</li>
          <li>
Common code will be developed that needs to store user-specific preferences in both
ASP.NET and SharePoint web applications and the code needs to support both forms-based
and Windows authentication.</li>
        </ol>
        <p>
Recently I found myself in situation #2 and planned on using the ASP.NET SqlProfileProvider
to save user preferences within common code that would be deployed to multiple ASP.NET
web applications, one of which runs within a SharePoint site collection. After settings
things up in Web.config and multiple rounds of writing prototype code, googling, and
debugging I was unable to get anything working. No matter what I did, the Profile
object was not available and <a href="http://stackoverflow.com/questions/1268964/sharepoint-2007-use-sqlprofileprovider-with-windows-integrated-authentication" target="_blank">it
seemed as if I had hit a dead end</a>. However, <a href="http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/1224ae5e-10e0-4d21-9d6d-35b7f771b318" target="_blank">thanks
to this MSDN forum post</a> I was able to track down why things were not working.
By default, SharePoint removes the Profile module which is normally available to an
ASP.NET web application and you have to manually add it back in to the Web.config
to be able to get and set ASP.NET Profile properties.
</p>
        <h1>Web.config Profile (add to system.web)
</h1>
        <pre class="xml" name="code">&lt;profile enabled="true" automaticSaveEnabled="true" 
         defaultProvider="AspNetSqlProfileProvider"&gt;
    &lt;providers&gt;
        &lt;clear/&gt;
        &lt;add name="AspNetSqlProfileProvider"
             connectionStringName="YOUR_CONNECTION_STRING_NAME"
             applicationName="YOUR_APPLICATION_NAME"
             type="System.Web.Profile.SqlProfileProvider, 
                 System.Web, Version=2.0.0.0, 
                 Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" /&gt;
    &lt;/providers&gt;
    &lt;properties&gt;
        &lt;add name="Property1" type="System.String" /&gt;
        &lt;add name="Property2" type="System.String" /&gt;
        &lt;add name="Property3" type="System.String" /&gt;
    &lt;/properties&gt;
&lt;/profile&gt; </pre>
        <h1>Web.config Module Include (add to httpModules)
</h1>
        <pre class="xml" name="code">&lt;add name="Profile" type="System.Web.Profile.ProfileModule" /&gt;</pre>
        <h1>Getting and Setting the Profile Properties in SharePoint Code
</h1>
        <p>
          <a href="http://blog.beckybertram.com/Lists/Posts/Post.aspx?ID=53" target="_blank">As
explained in this post by Becky Bertram</a> in SharePoint the Profile attributes defined
in Web.config are not available at compile-time to SharePoint code. In order to get
code to compile for deployment to SharePoint as a solution you have 2 choices:
</p>
        <p>
1. Write a custom provider which maps to each attribute (Becky’s article provides
an example of this for forms-based authentication which will also work for Windows
authentication).
</p>
        <p>
2. Make calls to <a href="http://msdn.microsoft.com/en-us/library/system.web.profile.profilebase.getpropertyvalue.aspx" target="_blank">Profile.GetPropertyValue</a> and <a href="http://msdn.microsoft.com/en-us/library/system.web.profile.profilebase.setpropertyvalue.aspx" target="_blank">Profile.SetPropertyValue</a> to
get and set the profile values for the current user.
</p>
        <p>
For example, given the above Web.config definitions, the code below would set values
for the current user that would be saved to the ASP.NET SQL Profile database:
</p>
        <pre class="xml" name="code">Profile.SetPropertyValue("Property1", "blue");
Profile.SetPropertyValue("Property2", System.DateTime.Now.ToString()); </pre>
        <h1>Prototype Code
</h1>
        <p>
I’ve found an effective way to work through “it should work but I better make sure
before I design a system around it” issues like this in SharePoint is to write up
prototype code that is simply deployed manually to the <strong>_layouts</strong> folder.
Then I just open the ASPX/CS files in Visual Studio, make changes, and reload the
page in the browser the same as if I was developing for ASP.NET. To help get you going
with setting up the Profile database I’ve included my Windows authentication and ASP.NET
Profile prototype code below which you can also <a href="http://mikeknowles.com/WindowsIdentityDebug.zip" target="_blank">download
as a zip file</a> (see the zip file readme for steps to deploy on your SharePoint
development server). Here’s an example of the prototype code output followed by the
code listings:
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/c7bc2efe4692_8593/image_4.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="381" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/c7bc2efe4692_8593/image_thumb_1.png" width="470" border="0" />
          </a>
        </p>
        <h1>WindowsAuthenticationContext.aspx
</h1>
        <pre class="xml" name="code">&lt;%@ Page Language="C#" AutoEventWireup="true" 
    CodeFile="WindowsAuthenticationContext.aspx.cs" 
    Inherits="WindowsAuthenticationContext" %&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;
&lt;head runat="server"&gt;
    &lt;title&gt;Windows Authentication Context&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form id="form1" runat="server"&gt;
        &lt;div&gt;
            &lt;pre&gt;&lt;asp:Literal ID="IdentityInfoLiteral" runat="server" /&gt;
            &lt;/pre&gt;
        &lt;/div&gt;        
        &lt;div&gt;
            &lt;asp:Literal ID="ExceptionLiteral" runat="server" /&gt;
            &lt;asp:Literal ID="ExceptionStackTraceLiteral" runat="server" /&gt;
        &lt;/div&gt;        
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
        <h1>WindowsAuthenticationContext.aspx.cs
</h1>
        <pre class="c#" name="code">using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Security;
using System.Security.Principal;
using System.Text;
using System.Web;
using System.Web.Profile;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; 

public partial class WindowsAuthenticationContext : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            StringWriter writer = new StringWriter(); 

            writer.WriteLine("Context.User.Identity.AuthenticationType=" + 
                Context.User.Identity.AuthenticationType);
            writer.WriteLine("Context.User.Identity.IsAuthenticated=" + 
                Context.User.Identity.IsAuthenticated);
            writer.WriteLine("Context.User.Identity.Name=" + 
                Context.User.Identity.Name);
            writer.WriteLine(); 

            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
            writer.WriteLine("WindowsIdentity.GetCurrent().AuthenticationType=" + 
                windowsIdentity.AuthenticationType);
            writer.WriteLine("WindowsIdentity.GetCurrent().IsAuthenticated=" +
                windowsIdentity.IsAuthenticated);
            writer.WriteLine("WindowsIdentity.GetCurrent().Name=" +
                windowsIdentity.Name);
            writer.WriteLine("WindowsIdentity.GetCurrent().User=" +
                windowsIdentity.User.ToString());

            if (Context.Profile != null)
            {
                writer.WriteLine();
                writer.WriteLine("Profile.IsAnonymous=" +
                    Profile.IsAnonymous);
                writer.WriteLine("Profile.UserName=" +
                    Profile.UserName);
                writer.WriteLine("Profile.LastActivityDate=" +
                    Profile.LastActivityDate.ToLongDateString());
                writer.WriteLine("Profile.LastUpdatedDate=" +
                    Profile.LastUpdatedDate.ToLongDateString());
                writer.WriteLine("Profile.GetType=" +
                    Profile.GetType());
                foreach (SettingsProperty property in 
                    ProfileBase.Properties)
                {
                    writer.WriteLine("&gt;&gt;Property name=" +
                        property.Name + " value=" +
                        Profile.GetPropertyValue(property.Name));
                }                

                writer.WriteLine();                
            }        
            IdentityInfoLiteral.Text = writer.ToString();           
        }
        catch (Exception ex)
        {
            ExceptionLiteral.Text = ex.ToString();
            ExceptionStackTraceLiteral.Text = ex.StackTrace.ToString();
        }
    }
}
</pre>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=b257a3d7-ff65-4694-9d9d-5e79b4e703af" />
      </body>
      <title>Integrating SharePoint Windows Authentication and the ASP.NET SqlProfileProvider</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,b257a3d7-ff65-4694-9d9d-5e79b4e703af.aspx</guid>
      <link>http://mikeknowles.com/blog/2009/08/16/IntegratingSharePointWindowsAuthenticationAndTheASPNETSqlProfileProvider.aspx</link>
      <pubDate>Sun, 16 Aug 2009 23:10:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx" target=_blank&gt;ASP.NET
Profile Properties&lt;/a&gt; provide a convenient way to store application and user-specific
preferences and personalization choices without having to write a lot of code to manage
the back-end data storage and retrieval. The ASP.NET &lt;a href="http://msdn.microsoft.com/en-us/library/x28wfk74.aspx" target=_blank&gt;Application
Services Database&lt;/a&gt; SqlProfileProvider can be leveraged to store and retrieve the
Profile settings in a SQL Express or SQL Server database. The &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.profile.sqlprofileprovider.aspx" target=_blank&gt;SqlProfileProvider&lt;/a&gt; will
manage the storage of user-specific settings by login name for both forms-based and
Windows authentication applications (anonymous user data can be stored in cookies
if enabled).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms548160.aspx" target=_blank&gt;SharePoint
2007 provides an extensive personalization model&lt;/a&gt; with it’s own set of management
user interfaces and APIs. If your SharePoint site is based on Windows Authentication
then SharePoint &lt;a href="http://msdn.microsoft.com/en-us/library/ms543640.aspx" target=_blank&gt;User
Profile Properties&lt;/a&gt; are available for storing user-specific data provided personalization
has been enabled for the farm and the personalization items have been setup in SharePoint
and/or Active Directory. 
&lt;/p&gt;
&lt;p&gt;
In certain circumstances functionality being developed for deployment to SharePoint
may still need to make use of ASP.NET SQL Server profiles instead of SharePoint user
profiles. Some examples of when this might occur:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
SharePoint personalization has not yet been configured and enabled or an organization
has decided not to enable the personalization system and only a few user-specific
properties need to stored. 
&lt;li&gt;
Common code will be developed that needs to store user-specific preferences in both
ASP.NET and SharePoint web applications and the code needs to support both forms-based
and Windows authentication.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Recently I found myself in situation #2 and planned on using the ASP.NET SqlProfileProvider
to save user preferences within common code that would be deployed to multiple ASP.NET
web applications, one of which runs within a SharePoint site collection. After settings
things up in Web.config and multiple rounds of writing prototype code, googling, and
debugging I was unable to get anything working. No matter what I did, the Profile
object was not available and &lt;a href="http://stackoverflow.com/questions/1268964/sharepoint-2007-use-sqlprofileprovider-with-windows-integrated-authentication" target=_blank&gt;it
seemed as if I had hit a dead end&lt;/a&gt;. However, &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/1224ae5e-10e0-4d21-9d6d-35b7f771b318" target=_blank&gt;thanks
to this MSDN forum post&lt;/a&gt; I was able to track down why things were not working.
By default, SharePoint removes the Profile module which is normally available to an
ASP.NET web application and you have to manually add it back in to the Web.config
to be able to get and set ASP.NET Profile properties.
&lt;/p&gt;
&lt;h1&gt;Web.config Profile (add to system.web)
&lt;/h1&gt;
&lt;pre class=xml name="code"&gt;&amp;lt;profile enabled="true" automaticSaveEnabled="true" 
         defaultProvider="AspNetSqlProfileProvider"&amp;gt;
    &amp;lt;providers&amp;gt;
        &amp;lt;clear/&amp;gt;
        &amp;lt;add name="AspNetSqlProfileProvider"
             connectionStringName="YOUR_CONNECTION_STRING_NAME"
             applicationName="YOUR_APPLICATION_NAME"
             type="System.Web.Profile.SqlProfileProvider, 
                 System.Web, Version=2.0.0.0, 
                 Culture=neutral, 
                 PublicKeyToken=b03f5f7f11d50a3a" /&amp;gt;
    &amp;lt;/providers&amp;gt;
    &amp;lt;properties&amp;gt;
        &amp;lt;add name="Property1" type="System.String" /&amp;gt;
        &amp;lt;add name="Property2" type="System.String" /&amp;gt;
        &amp;lt;add name="Property3" type="System.String" /&amp;gt;
    &amp;lt;/properties&amp;gt;
&amp;lt;/profile&amp;gt; &lt;/pre&gt;
&lt;h1&gt;Web.config Module Include (add to httpModules)
&lt;/h1&gt;
&lt;pre class=xml name="code"&gt;&amp;lt;add name="Profile" type="System.Web.Profile.ProfileModule" /&amp;gt;&lt;/pre&gt;
&lt;h1&gt;Getting and Setting the Profile Properties in SharePoint Code
&lt;/h1&gt;
&lt;p&gt;
&lt;a href="http://blog.beckybertram.com/Lists/Posts/Post.aspx?ID=53" target=_blank&gt;As
explained in this post by Becky Bertram&lt;/a&gt; in SharePoint the Profile attributes defined
in Web.config are not available at compile-time to SharePoint code. In order to get
code to compile for deployment to SharePoint as a solution you have 2 choices:
&lt;/p&gt;
&lt;p&gt;
1. Write a custom provider which maps to each attribute (Becky’s article provides
an example of this for forms-based authentication which will also work for Windows
authentication).
&lt;/p&gt;
&lt;p&gt;
2. Make calls to &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.profile.profilebase.getpropertyvalue.aspx" target=_blank&gt;Profile.GetPropertyValue&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.profile.profilebase.setpropertyvalue.aspx" target=_blank&gt;Profile.SetPropertyValue&lt;/a&gt; to
get and set the profile values for the current user.
&lt;/p&gt;
&lt;p&gt;
For example, given the above Web.config definitions, the code below would set values
for the current user that would be saved to the ASP.NET SQL Profile database:
&lt;/p&gt;
&lt;pre class=xml name="code"&gt;Profile.SetPropertyValue("Property1", "blue");
Profile.SetPropertyValue("Property2", System.DateTime.Now.ToString()); &lt;/pre&gt;
&lt;h1&gt;Prototype Code
&lt;/h1&gt;
&lt;p&gt;
I’ve found an effective way to work through “it should work but I better make sure
before I design a system around it” issues like this in SharePoint is to write up
prototype code that is simply deployed manually to the &lt;strong&gt;_layouts&lt;/strong&gt; folder.
Then I just open the ASPX/CS files in Visual Studio, make changes, and reload the
page in the browser the same as if I was developing for ASP.NET. To help get you going
with setting up the Profile database I’ve included my Windows authentication and ASP.NET
Profile prototype code below which you can also &lt;a href="http://mikeknowles.com/WindowsIdentityDebug.zip" target=_blank&gt;download
as a zip file&lt;/a&gt; (see the zip file readme for steps to deploy on your SharePoint
development server). Here’s an example of the prototype code output followed by the
code listings:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/c7bc2efe4692_8593/image_4.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=381 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/c7bc2efe4692_8593/image_thumb_1.png" width=470 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h1&gt;WindowsAuthenticationContext.aspx
&lt;/h1&gt;
&lt;pre class=xml name="code"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" 
    CodeFile="WindowsAuthenticationContext.aspx.cs" 
    Inherits="WindowsAuthenticationContext" %&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" &amp;gt;
&amp;lt;head runat="server"&amp;gt;
    &amp;lt;title&amp;gt;Windows Authentication Context&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;form id="form1" runat="server"&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;pre&amp;gt;&amp;lt;asp:Literal ID="IdentityInfoLiteral" runat="server" /&amp;gt;
            &amp;lt;/pre&amp;gt;
        &amp;lt;/div&amp;gt;        
        &amp;lt;div&amp;gt;
            &amp;lt;asp:Literal ID="ExceptionLiteral" runat="server" /&amp;gt;
            &amp;lt;asp:Literal ID="ExceptionStackTraceLiteral" runat="server" /&amp;gt;
        &amp;lt;/div&amp;gt;        
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;h1&gt;WindowsAuthenticationContext.aspx.cs
&lt;/h1&gt;
&lt;pre class=c# name="code"&gt;using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.IO;
using System.Security;
using System.Security.Principal;
using System.Text;
using System.Web;
using System.Web.Profile;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; 

public partial class WindowsAuthenticationContext : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            StringWriter writer = new StringWriter(); 

            writer.WriteLine("Context.User.Identity.AuthenticationType=" + 
                Context.User.Identity.AuthenticationType);
            writer.WriteLine("Context.User.Identity.IsAuthenticated=" + 
                Context.User.Identity.IsAuthenticated);
            writer.WriteLine("Context.User.Identity.Name=" + 
                Context.User.Identity.Name);
            writer.WriteLine(); 

            WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
            writer.WriteLine("WindowsIdentity.GetCurrent().AuthenticationType=" + 
                windowsIdentity.AuthenticationType);
            writer.WriteLine("WindowsIdentity.GetCurrent().IsAuthenticated=" +
                windowsIdentity.IsAuthenticated);
            writer.WriteLine("WindowsIdentity.GetCurrent().Name=" +
                windowsIdentity.Name);
            writer.WriteLine("WindowsIdentity.GetCurrent().User=" +
                windowsIdentity.User.ToString());

            if (Context.Profile != null)
            {
                writer.WriteLine();
                writer.WriteLine("Profile.IsAnonymous=" +
                    Profile.IsAnonymous);
                writer.WriteLine("Profile.UserName=" +
                    Profile.UserName);
                writer.WriteLine("Profile.LastActivityDate=" +
                    Profile.LastActivityDate.ToLongDateString());
                writer.WriteLine("Profile.LastUpdatedDate=" +
                    Profile.LastUpdatedDate.ToLongDateString());
                writer.WriteLine("Profile.GetType=" +
                    Profile.GetType());
                foreach (SettingsProperty property in 
                    ProfileBase.Properties)
                {
                    writer.WriteLine("&amp;gt;&amp;gt;Property name=" +
                        property.Name + " value=" +
                        Profile.GetPropertyValue(property.Name));
                }                

                writer.WriteLine();                
            }        
            IdentityInfoLiteral.Text = writer.ToString();           
        }
        catch (Exception ex)
        {
            ExceptionLiteral.Text = ex.ToString();
            ExceptionStackTraceLiteral.Text = ex.StackTrace.ToString();
        }
    }
}
&lt;/pre&gt;&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=b257a3d7-ff65-4694-9d9d-5e79b4e703af" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,b257a3d7-ff65-4694-9d9d-5e79b4e703af.aspx</comments>
      <category>SharePoint</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=faa24d4f-33df-45cf-a428-6ee2da80c77d</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,faa24d4f-33df-45cf-a428-6ee2da80c77d.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,faa24d4f-33df-45cf-a428-6ee2da80c77d.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=faa24d4f-33df-45cf-a428-6ee2da80c77d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here’s a quick way to get a listing of the currently running SharePoint application
pool process IDs. Save this script in the directory of your choice and name it with
a <strong>.bat</strong> extension (e.g. GetAppPoolProcessIds.bat):
</p>
        <pre class="c#" name="code">cscript.exe %systemroot%\system32\iisapp.vbs
pause</pre>
        <p>
Double-click the script and it will display the list of processes. Click any key to
close the window:
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_4.png">
            <img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_thumb_1.png" width="559" border="0" />
          </a> 
</p>
        <p>
Add the script to the Windows Start Menu and click it each time you need to see the
process list. This is what I do each time I run the Visual Studio Debugger to debug
a DLL deployed to a SharePoint application.
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_6.png">
            <img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="384" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_thumb_2.png" width="187" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=faa24d4f-33df-45cf-a428-6ee2da80c77d" />
      </body>
      <title>Automate the Display of SharePoint Application Pool Process IDs with a Batch Script</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,faa24d4f-33df-45cf-a428-6ee2da80c77d.aspx</guid>
      <link>http://mikeknowles.com/blog/2009/08/02/AutomateTheDisplayOfSharePointApplicationPoolProcessIDsWithABatchScript.aspx</link>
      <pubDate>Sun, 02 Aug 2009 06:59:00 GMT</pubDate>
      <description>&lt;p&gt;
Here’s a quick way to get a listing of the currently running SharePoint application
pool process IDs. Save this script in the directory of your choice and name it with
a &lt;strong&gt;.bat&lt;/strong&gt; extension (e.g. GetAppPoolProcessIds.bat):
&lt;/p&gt;
&lt;pre class="c#" name="code"&gt;cscript.exe %systemroot%\system32\iisapp.vbs
pause&lt;/pre&gt;
&lt;p&gt;
Double-click the script and it will display the list of processes. Click any key to
close the window:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_thumb_1.png" width="559" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Add the script to the Windows Start Menu and click it each time you need to see the
process list. This is what I do each time I run the Visual Studio Debugger to debug
a DLL deployed to a SharePoint application.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="384" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/761b1a5746c8_FE0B/image_thumb_2.png" width="187" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=faa24d4f-33df-45cf-a428-6ee2da80c77d" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,faa24d4f-33df-45cf-a428-6ee2da80c77d.aspx</comments>
      <category>SharePoint</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=291ea292-401e-47b0-8cc6-d5624427cc1f</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,291ea292-401e-47b0-8cc6-d5624427cc1f.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,291ea292-401e-47b0-8cc6-d5624427cc1f.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=291ea292-401e-47b0-8cc6-d5624427cc1f</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I’ve been asked how to get Google Analytics working in an intranet site with
a single name in the URL, for example: <strong>http://intranet. </strong>The first
time I added Google Analytics to a site it was a development site accessed by server-name:port-number.
For days after correctly adding the tracking code there was still no data showing
up in the Google Analytics dashboard reports. 
</p>
        <p>
Turns out the fix required adding one simple JavaScript call to a Google JavaScript
API function. When adding Google Analytics tracking code to a site with a single name
in the URL you need to call <a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiDomainDirectory.html#_gat.GA_Tracker_._setDomainName" target="_blank">_setDomainName(“none”)</a> prior
to making the call to <a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._trackPageview" target="_blank">_trackPageView</a>:
</p>
        <p>
          <a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/EnableGoogleAnalyticsPageTrackinginaSing_11D5E/image_2.png">
            <img title="image" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="190" alt="image" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/EnableGoogleAnalyticsPageTrackinginaSing_11D5E/image_thumb.png" width="587" border="0" />
          </a>
        </p>
        <p>
By default the Google Tracking Code snippet provided in the Google Analytics Profile
Settings uses the “auto” domain name mode which expects to see a <a href="http://en.wikipedia.org/wiki/Fully_qualified_domain_name" target="_blank">fully-qualified
domain name (FQDN)</a> composed of the domain name, followed by a period, followed
by the domain extension (.com, .net, .biz, etc.). Setting the domain name to “none”
disables the FQDN requirement and will record your pages in Google Analytics the same
as a site with a FQDN.
</p>
        <p>
I have deployed this fix with success to both a SharePoint 2007 Team Site and Publishing
Portal site available only by a single name URL and port number. In both cases the
site data was not showing up in Analytics until I added the call to set the domain
name to “none”. It’s critical that you call <strong>_setDomainName</strong> before
calling <strong>_trackPageView</strong> for this change to have any effect.
</p>
        <p>
As with all changes to JavaScript tracking code it can take up to 24 hours before
you see data start showing up in the Google Analytics dashboard reports, and changes
only apply going forward so there’s no way to recover clicks from before you deployed
the code change.
</p>
        <p>
Here’s an example of the tracking code with the domain name set to “none”. Replace
YOUR_WEB_PROPERTY_ID with the value assigned to your site profile by Google Analytics:
</p>
        <pre class="js" name="code">&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + 
    "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;
&lt;script type="text/javascript"&gt;
try {
var pageTracker = _gat._getTracker("YOUR_WEB_PROPERTY_ID");
pageTracker._setDomainName("none");
pageTracker._trackPageview();
} catch(err) {}&lt;/script&gt;</pre>
        <img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=291ea292-401e-47b0-8cc6-d5624427cc1f" />
      </body>
      <title>Enable Google Analytics Page Tracking in a Single-Name Intranet Site</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,291ea292-401e-47b0-8cc6-d5624427cc1f.aspx</guid>
      <link>http://mikeknowles.com/blog/2009/07/11/EnableGoogleAnalyticsPageTrackingInASingleNameIntranetSite.aspx</link>
      <pubDate>Sat, 11 Jul 2009 01:00:00 GMT</pubDate>
      <description>&lt;p&gt;
Recently I’ve been asked how to get Google Analytics working in an intranet site with
a single name in the URL, for example: &lt;strong&gt;http://intranet. &lt;/strong&gt;The first
time I added Google Analytics to a site it was a development site accessed by server-name:port-number.
For days after correctly adding the tracking code there was still no data showing
up in the Google Analytics dashboard reports. 
&lt;/p&gt;
&lt;p&gt;
Turns out the fix required adding one simple JavaScript call to a Google JavaScript
API function. When adding Google Analytics tracking code to a site with a single name
in the URL you need to call &lt;a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiDomainDirectory.html#_gat.GA_Tracker_._setDomainName" target=_blank&gt;_setDomainName(“none”)&lt;/a&gt; prior
to making the call to &lt;a href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._trackPageview" target=_blank&gt;_trackPageView&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/EnableGoogleAnalyticsPageTrackinginaSing_11D5E/image_2.png"&gt;&lt;img title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=190 alt=image src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/EnableGoogleAnalyticsPageTrackinginaSing_11D5E/image_thumb.png" width=587 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
By default the Google Tracking Code snippet provided in the Google Analytics&amp;nbsp;Profile
Settings&amp;nbsp;uses the “auto” domain name mode which expects to see a &lt;a href="http://en.wikipedia.org/wiki/Fully_qualified_domain_name" target=_blank&gt;fully-qualified
domain name (FQDN)&lt;/a&gt; composed of the domain name, followed by a period, followed
by the domain extension (.com, .net, .biz, etc.). Setting the domain name to “none”
disables the FQDN requirement and will record your pages in Google Analytics the same
as a site with a FQDN.
&lt;/p&gt;
&lt;p&gt;
I have deployed this fix with success to both a SharePoint 2007 Team Site and Publishing
Portal site available only by a single name URL and port number. In both cases the
site data was not showing up in Analytics until I added the call to set the domain
name to “none”. It’s critical that you call &lt;strong&gt;_setDomainName&lt;/strong&gt; before
calling &lt;strong&gt;_trackPageView&lt;/strong&gt; for this change to have any effect.
&lt;/p&gt;
&lt;p&gt;
As with all changes to JavaScript tracking code it can take up to 24 hours before
you see data start showing up in the Google Analytics dashboard reports, and changes
only apply going forward so there’s no way to recover clicks from before you deployed
the code change.
&lt;/p&gt;
&lt;p&gt;
Here’s an example of the tracking code with the domain name set to “none”. Replace
YOUR_WEB_PROPERTY_ID with the value assigned to your site profile by Google Analytics:
&lt;/p&gt;
&lt;pre class=js name="code"&gt;&amp;lt;script type="text/javascript"&amp;gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + 
    "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;
try {
var pageTracker = _gat._getTracker("YOUR_WEB_PROPERTY_ID");
pageTracker._setDomainName("none");
pageTracker._trackPageview();
} catch(err) {}&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=291ea292-401e-47b0-8cc6-d5624427cc1f" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,291ea292-401e-47b0-8cc6-d5624427cc1f.aspx</comments>
      <category>GoogleAnalytics</category>
      <category>SharePoint</category>
    </item>
    <item>
      <trackback:ping>http://mikeknowles.com/blog/Trackback.aspx?guid=4e4a07c5-7159-4902-9a84-e305bb05972e</trackback:ping>
      <pingback:server>http://mikeknowles.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mikeknowles.com/blog/PermaLink,guid,4e4a07c5-7159-4902-9a84-e305bb05972e.aspx</pingback:target>
      <dc:creator>Mike</dc:creator>
      <wfw:comment>http://mikeknowles.com/blog/CommentView,guid,4e4a07c5-7159-4902-9a84-e305bb05972e.aspx</wfw:comment>
      <wfw:commentRss>http://mikeknowles.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4e4a07c5-7159-4902-9a84-e305bb05972e</wfw:commentRss>
      <title>Populating the PlaceHolderTitleBreadcrumb in a Custom Site Collection Settings Page</title>
      <guid isPermaLink="false">http://mikeknowles.com/blog/PermaLink,guid,4e4a07c5-7159-4902-9a84-e305bb05972e.aspx</guid>
      <link>http://mikeknowles.com/blog/2009/07/03/PopulatingThePlaceHolderTitleBreadcrumbInACustomSiteCollectionSettingsPage.aspx</link>
      <pubDate>Fri, 03 Jul 2009 01:02:00 GMT</pubDate>
      <description>&lt;p&gt;
This article provides a template for adding the breadcrumb to the top of your custom
settings pages. If you are unfamiliar with the steps involved to create a custom settings
page and have it show up in the links in the Site Collection Administrators section
on the Site Settings page, first check out these posts:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://graegert.com/?p=505" target="_blank"&gt;Using the SPPropertyBag with
Custom Admin Pages in SharePoint by Steve Gragert&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc794261.aspx" target="_blank"&gt;Office
Space: Custom Auditing In SharePoint by Ted Pattison&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Using the techniques described in the above-mentioned articles I was able to setup
a custom settings page and access it from the Site Settings page:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/PopulatingthePlaceHolderTitleBreadcrumbi_12555/SiteCollectionAdminLink_2.png"&gt;&lt;img title="SiteCollectionAdminLink" style="border: 0px none; display: inline;" alt="SiteCollectionAdminLink" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/PopulatingthePlaceHolderTitleBreadcrumbi_12555/SiteCollectionAdminLink_thumb.png" border="0" width="244" height="405"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
However once loaded I noticed there was no breadcrumb displayed above the new page
title:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/PopulatingthePlaceHolderTitleBreadcrumbi_12555/SiteSettingsNoBreadcrumb_2.png"&gt;&lt;img title="SiteSettingsNoBreadcrumb" style="border: 0px none; display: inline;" alt="SiteSettingsNoBreadcrumb" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/PopulatingthePlaceHolderTitleBreadcrumbi_12555/SiteSettingsNoBreadcrumb_thumb.png" border="0" width="526" height="124"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The reason the breadcrumb does not appear is because SharePoint does not have the
custom settings page in it’s sitemap file which exists on disk “somewhere” in the
12 hive. Furthermore, SharePoint does not provide a programmatic means to add the
page to the sitemap by updating a feature configuration or writing code that uses
the object model. The only way to add your page to the sitemap is to physically update
the sitemap file on every server in the farm. And as every good SharePoint student
learns early on, we should not modify files on disk because they might change in future
upgrades and it makes farm deployment across multiple servers more time-consuming
and error prone due to the need to update every server manually.
&lt;/p&gt;
&lt;p&gt;
After a couple of days working on this admin page it was quite aggravating not having
the breadcrumb since that is what I always use to get back to the main Site Settings
page. So here’s what I did: using &lt;a href="http://getfirebug.com/" target="_blank"&gt;Firebug&lt;/a&gt; I
found the html generated by admin.master when it builds the breadcrumb and then added
that to my page by overriding the content section populated in the master page. Since
the custom settings page will always be deployed at the Site Collection level, the
only item I had to populate dynamically was the Site Collection title. The custom
settings page title can simply be added in the ASPX for the page:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/PopulatingthePlaceHolderTitleBreadcrumbi_12555/SiteSettingsBreadcrumb_2.png"&gt;&lt;img title="SiteSettingsBreadcrumb" style="border: 0px none; display: inline;" alt="SiteSettingsBreadcrumb" src="http://mikeknowles.com/blog/content/binary/WindowsLiveWriter/PopulatingthePlaceHolderTitleBreadcrumbi_12555/SiteSettingsBreadcrumb_thumb.png" border="0" width="500" height="173"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Here’s the code template to add to your custom settings ASPX page. Substitute “SETTINGS
PAGE TITLE” below with your custom settings page title:
&lt;/p&gt;
&lt;pre class="c#" name="code"&gt;
&lt;asp:content contentplaceholderid="PlaceHolderTitleBreadcrumb" runat="server"&gt;
&lt;span id="PlaceHolderTitleBreadcrumb_ContentMap"&gt; &lt;span&gt; 
&lt;asp:hyperlink id="SiteRootLink" navigateurl="~/" cssclass="ms-sitemapdirectional" runat="server"&gt;&lt;/asp:hyperlink&gt;
&lt;/span&gt; &lt;span&gt; &amp;gt; &lt;/span&gt; &lt;span&gt; 
&lt;asp:hyperlink navigateurl="~/_layouts/settings.aspx" text="Site Settings" cssclass="ms-sitemapdirectional" runat="server"&gt;&lt;/asp:hyperlink&gt;
&lt;/span&gt; &lt;span&gt; &amp;gt; &lt;/span&gt; &lt;span class="ms-sitemapdirectional"&gt;SETTINGS PAGE TITLE&lt;/span&gt; &lt;/span&gt; 
&lt;/asp:content&gt;
&lt;/pre&gt;
&lt;p&gt;
Add the variable and text assignment for &lt;strong&gt;SiteRootLink&lt;/strong&gt; to the code-behind
for your custom settings page as shown below. The code snippet assumes the custom
page inherits from &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.layoutspagebase.aspx" target="_blank"&gt;Microsoft.SharePoint.WebControls.LayoutsPageBase&lt;/a&gt;:
&lt;/p&gt;
&lt;pre class="c#" name="code"&gt;protected HyperLink SiteRootLink;

protected void Page_Load(object sender, EventArgs e)
{
    this.SiteRootLink.Text = this.Site.RootWeb.Title;
&lt;/pre&gt;
&lt;p&gt;
Admittedly this is not the most robust of solutions because it’s possible Microsoft
may change the style definitions or controls used to generate the PlaceholderTitleBreadcrumb.
I do think it’s one step better then having to modify the sitemap file on all the
servers in a farm due to the inconvenience and the equally likely chance a future
upgrade might change the location or structure of the sitemap file. So it’s not ideal,
but at least it’s something that can be packaged into a feature and deployed without
the need for manual changes after feature deployment.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mikeknowles.com/blog/aggbug.ashx?id=4e4a07c5-7159-4902-9a84-e305bb05972e" /&gt;</description>
      <comments>http://mikeknowles.com/blog/CommentView,guid,4e4a07c5-7159-4902-9a84-e305bb05972e.aspx</comments>
      <category>SharePoint</category>
    </item>
  </channel>
</rss>
