<?xml version="1.0" encoding="utf-8"?>
<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>Brian Noyes' Blog - ClickOnce</title>
    <link>http://briannoyes.net/</link>
    <description>.NET Ramblings</description>
    <language>en-us</language>
    <copyright>Brian Noyes</copyright>
    <lastBuildDate>Tue, 13 Mar 2007 11:10:10 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.12105.0</generator>
    <managingEditor>brian.noyes@gmail.com</managingEditor>
    <webMaster>brian.noyes@gmail.com</webMaster>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=4642a111-f04c-4a28-9395-8454c4eb5ced</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4642a111-f04c-4a28-9395-8454c4eb5ced</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those of you looking for the ClickOnce Community Resource Kit I wrote for the
Patterns and Practices Smart Client Software Factory team, you may have found that
it has disappeared from its old location on GotDotNet.
</p>
        <p>
In case you haven't heard, GotDotNet is slowly fading away (known as dying a slow
death in some circles) and <a href="http://www.codeplex.com">CodePlex</a> has replaced
it as the place that Microsoft will put community resources.  So if you go looking
for something on GotDotNet and don't find it, make sure you do a search on CodePlex.
</p>
        <p>
The download for my ClickOnce Community Resource Kit can be found here:
</p>
        <p>
          <a href="http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060">http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060</a>
        </p>
        <p>
on the <a href="http://www.codeplex.com/smartclient/Wiki/View.aspx?title=Smart%20Client%20Software%20Factory">Wiki
for the Smart Client Guidance</a>.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4642a111-f04c-4a28-9395-8454c4eb5ced" />
      </body>
      <title>ClickOnce Community Resource Kit has found a new home</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</guid>
      <link>http://briannoyes.net/2007/03/13/ClickOnceCommunityResourceKitHasFoundANewHome.aspx</link>
      <pubDate>Tue, 13 Mar 2007 11:10:10 GMT</pubDate>
      <description>&lt;p&gt;
For those of you looking for the ClickOnce Community Resource Kit I wrote for the
Patterns and Practices Smart Client Software Factory team, you may have found that
it has disappeared from its old location on GotDotNet.
&lt;/p&gt;
&lt;p&gt;
In case you haven't heard, GotDotNet is slowly fading away (known as dying a slow
death in some circles) and &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt; has replaced
it as the place that Microsoft will put community resources.&amp;nbsp; So if you go looking
for something on GotDotNet and don't find it, make sure you do a search on CodePlex.
&lt;/p&gt;
&lt;p&gt;
The download for my ClickOnce Community Resource Kit can be found here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060"&gt;http://www.codeplex.com/smartclient/Project/FileDownload.aspx?DownloadId=5060&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
on the &lt;a href="http://www.codeplex.com/smartclient/Wiki/View.aspx?title=Smart%20Client%20Software%20Factory"&gt;Wiki
for the Smart Client Guidance&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4642a111-f04c-4a28-9395-8454c4eb5ced" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,4642a111-f04c-4a28-9395-8454c4eb5ced.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=643bb45f-330d-44dc-b21e-5b6e69774dba</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=643bb45f-330d-44dc-b21e-5b6e69774dba</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I back from my trip to visit family for Christmas to a nice little "gift" awaiting
me when I got home - a first printing copy of my book. That means it should be shipping
soon from retailers.
</p>
        <p>
You can find more information about the book here:
</p>
        <p>
          <a href="http://www.softinsight.com/clickoncebook/default.aspx">http://www.softinsight.com/clickoncebook/default.aspx</a>
        </p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=643bb45f-330d-44dc-b21e-5b6e69774dba" />
      </body>
      <title>Smart Client Deployment with ClickOnce is in print</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</guid>
      <link>http://briannoyes.net/2006/12/28/SmartClientDeploymentWithClickOnceIsInPrint.aspx</link>
      <pubDate>Thu, 28 Dec 2006 20:00:43 GMT</pubDate>
      <description>&lt;p&gt;
I back from my trip to visit family for Christmas to a nice little "gift" awaiting
me when I got home - a first printing copy of my book. That means it should be shipping
soon from retailers.
&lt;/p&gt;
&lt;p&gt;
You can find more information about the book here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.softinsight.com/clickoncebook/default.aspx"&gt;http://www.softinsight.com/clickoncebook/default.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=643bb45f-330d-44dc-b21e-5b6e69774dba" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,643bb45f-330d-44dc-b21e-5b6e69774dba.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=0d5fd34e-e8f7-4eb3-89b3-d50b77579269</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0d5fd34e-e8f7-4eb3-89b3-d50b77579269</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
They have been telling me for months it was going to show up there, I finally stopped
checking because we are very close to going to print anyway. But if you want to get
your hands on my ClickOnce book now, it is available on Rough Cuts at long last:
</p>
        <p>
          <a href="http://my.safaribooksonline.com/0321197690">http://my.safaribooksonline.com/0321197690</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0d5fd34e-e8f7-4eb3-89b3-d50b77579269" />
      </body>
      <title>My ClickOnce Book is Available on Rough Cuts!!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</guid>
      <link>http://briannoyes.net/2006/12/01/MyClickOnceBookIsAvailableOnRoughCuts.aspx</link>
      <pubDate>Fri, 01 Dec 2006 21:04:14 GMT</pubDate>
      <description>&lt;p&gt;
They have been telling me for months it was going to show up there, I finally stopped
checking because we are very close to going to print anyway. But if you want to get
your hands on my ClickOnce book now, it is available on Rough Cuts at long last:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://my.safaribooksonline.com/0321197690"&gt;http://my.safaribooksonline.com/0321197690&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0d5fd34e-e8f7-4eb3-89b3-d50b77579269" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,0d5fd34e-e8f7-4eb3-89b3-d50b77579269.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=e020da51-7035-48e2-accb-3e84c4f7f8c3</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=e020da51-7035-48e2-accb-3e84c4f7f8c3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A fairly messy little detail of ClickOnce has surfaced that I wanted to get some word
out about regarding publisher certificate renewals and how they affect ClickOnce.
</p>
        <p>
ClickOnce only allows you to perform an update to an application if the updated version
manifests are signed by the same publisher certificate as was used to originally sign
the application.
</p>
        <p>
When ClickOnce was designed, the product team understanding was that certificate issuers
such as Verisign and thawte would renew certificates without re-issuing a new certificate
(with a new private/public key pair). Unfortunately, that understanding was incorrect.
Certificate issuers do in fact issue a whole new cert, just one that has the same
CN (Common Name) when they do a renewal.
</p>
        <p>
The result of this is that if you have a ClickOnce application in production and your
publisher cert expires, you will no longer be able to issue updates to your application
with your new cert. You will have to have users uninstall the previous version and
install the new version as a fresh install.
</p>
        <p>
To combat this for the near term, you may want to consider buying a cert that lasts
longer than a year.
</p>
        <p>
Microsoft is looking into a fix for this in the Orcas release, but the details of
what that fix will look like and how it will affect the update process is yet to be
determined.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e020da51-7035-48e2-accb-3e84c4f7f8c3" />
      </body>
      <title>ClickOnce Publisher Certificate Renewals and Updating Your Application</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</guid>
      <link>http://briannoyes.net/2006/11/21/ClickOncePublisherCertificateRenewalsAndUpdatingYourApplication.aspx</link>
      <pubDate>Tue, 21 Nov 2006 21:35:16 GMT</pubDate>
      <description>&lt;p&gt;
A fairly messy little detail of ClickOnce has surfaced that I wanted to get some word
out about regarding publisher certificate renewals and how they affect ClickOnce.
&lt;/p&gt;
&lt;p&gt;
ClickOnce only allows you to perform an update to an application if the updated version
manifests are signed by the same publisher certificate as was used to originally sign
the application.
&lt;/p&gt;
&lt;p&gt;
When ClickOnce was designed, the product team understanding was that certificate issuers
such as Verisign and thawte would renew certificates without re-issuing a new certificate
(with a new private/public key pair). Unfortunately, that understanding was incorrect.
Certificate issuers do in fact issue a whole new cert, just one that has the same
CN (Common Name) when they do a renewal.
&lt;/p&gt;
&lt;p&gt;
The result of this is that if you have a ClickOnce application in production and your
publisher cert expires, you will no longer be able to issue updates to your application
with your new cert. You will have to have users uninstall the previous version and
install the new version as a fresh install.
&lt;/p&gt;
&lt;p&gt;
To combat this for the near term, you may want to consider buying a cert that lasts
longer than a year.
&lt;/p&gt;
&lt;p&gt;
Microsoft is looking into a fix for this in the Orcas release, but the details of
what that fix will look like and how it will affect the update process is yet to be
determined.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=e020da51-7035-48e2-accb-3e84c4f7f8c3" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,e020da51-7035-48e2-accb-3e84c4f7f8c3.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=db2e85dd-3680-4f5b-b85c-fefb109e0ebc</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=db2e85dd-3680-4f5b-b85c-fefb109e0ebc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you want to win a free seat for our Advanced .NET 2.0 Master Class, being held
4-8 Dec 2006 in Reston, VA, be the first one to email me at brian.noyesATidesign.net
with the answer to the following question:
</p>
        <p>
What is the name of the class that you use to sign a ClickOnce manifest after making
modifications to it and writing it out with the manifest utility APIs?
</p>
        <p>
Race is on! 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=db2e85dd-3680-4f5b-b85c-fefb109e0ebc" />
      </body>
      <title>IDesign Advanced .NET Master Class Seat Giveaway</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</guid>
      <link>http://briannoyes.net/2006/11/17/IDesignAdvancedNETMasterClassSeatGiveaway.aspx</link>
      <pubDate>Fri, 17 Nov 2006 19:16:47 GMT</pubDate>
      <description>&lt;p&gt;
If you want to win a free seat for our Advanced .NET 2.0 Master Class, being held
4-8 Dec 2006 in Reston, VA, be the first one to email me at brian.noyesATidesign.net
with the answer to the following question:
&lt;/p&gt;
&lt;p&gt;
What is the name of the class that you use to sign a ClickOnce manifest after making
modifications to it and writing it out with the manifest utility APIs?
&lt;/p&gt;
&lt;p&gt;
Race is on!&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=db2e85dd-3680-4f5b-b85c-fefb109e0ebc" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,db2e85dd-3680-4f5b-b85c-fefb109e0ebc.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=a0e9b379-5eab-4385-a4a0-069b28f39fa0</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a0e9b379-5eab-4385-a4a0-069b28f39fa0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another great conference complete. Around 5000 showed up and we had great feedback
from the crowd that it was a good show. If you haven't been to connections before,
you really should check it out.
</p>
        <p>
I gave three talks this week. You can get the slides and demos for each below.
</p>
        <p>
Real World ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDP301_RealWorldClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/RealWorldClickOnceDemos.zip">Demos</a><br />
Workflow Driven Windows Applications:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWX301_WorkflowDrivenWindowsApplications.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/WorkflowWindowsAppDemos.zip">Demos</a><br />
Implement a Data Layer with the VS 2005 DataSet Designer:  <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDA302_ImplementDataLayerwithDataSetDesigner.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevConnections/DataSetDesignerDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a0e9b379-5eab-4385-a4a0-069b28f39fa0" />
      </body>
      <title>DevConnections Vegas Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</guid>
      <link>http://briannoyes.net/2006/11/10/DevConnectionsVegasSlidesAndDemos.aspx</link>
      <pubDate>Fri, 10 Nov 2006 02:02:33 GMT</pubDate>
      <description>&lt;p&gt;
Another great conference complete. Around 5000 showed up and we had great feedback
from the crowd that it was a good show. If you haven't been to connections before,
you really should check it out.
&lt;/p&gt;
&lt;p&gt;
I gave three talks this week. You can get the slides and demos for each below.
&lt;/p&gt;
&lt;p&gt;
Real World ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDP301_RealWorldClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/RealWorldClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Workflow Driven Windows Applications:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VWX301_WorkflowDrivenWindowsApplications.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/WorkflowWindowsAppDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Implement a Data Layer with the VS 2005 DataSet Designer:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/VDA302_ImplementDataLayerwithDataSetDesigner.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevConnections/DataSetDesignerDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a0e9b379-5eab-4385-a4a0-069b28f39fa0" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,a0e9b379-5eab-4385-a4a0-069b28f39fa0.aspx</comments>
      <category>.NET</category>
      <category>.NET 3.0</category>
      <category>Architecture</category>
      <category>ClickOnce</category>
      <category>Data Binding</category>
      <category>DevConnections</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=435524e7-340c-4b4b-933d-a1c38d27e8ea</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=435524e7-340c-4b4b-933d-a1c38d27e8ea</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you haven't experienced Windows Vista yet, it is a very cool operating system,
but there are a lot of lessons to learn in getting up to speed in working in the new
environment. 
</p>
        <p>
The biggest thing to get used to if you haven't been running a non-admin account on
your XP machine is that there are probably a hundred things or more that you get away
with that you don't even know that the reason you get away with it is that you are
an admin.
</p>
        <p>
In Vista, even when logged in with an administrator account, you are still not allowed
to do administrator things without a privilege elevation through a mechanism called
User Access Control (UAC). UAC will seem like a living hell at first because all kinds
of things will stop working for you. For example, if you are only getting to some
files because you are an admin, and an app such as Quicken tries to run and access
those files, you will just get whatever kind of error the app vendor decided to surface
for a file I/O error. However, the best way to approach it is to treat it as a learning
experience to figure out how to avoid running things as admin unless you really need
to (i.e. give your user account permissions to the directories you really need, don't
rely on Admin privilege to give you access).
</p>
        <p>
Another example is when publishing with ClickOnce. When you publish from Visual Studio
to an http address, VS uses Frontpage Server Extensions (FPE) to create the virtual
directory and copy the files to it. First step on Windows Vista is that you need to
have IIS 6 Compatibility enabled (it is not on by default, nor is IIS installed by
default like XP). Once you do that, IIS 7 knows how to look like a Frontpage Server
Extension endpoint. The other thing is that you can only access the web server through
FPE if you are accessing as an admin from VS. 
</p>
        <p>
Even when logged in as an admin, VS will not be running with admin privilege by default.
As a result, when you try to publish a ClickOnce app you will get an obscure error
that says that FPE is not installed on the server. Specifically:
</p>
        <p>
"Failed to connect to 'http://localhost/WindowsApplication3/' with the following error:
Unable to create the Web 'http://localhost/WindowsApplication3/'.  The Web server
does not appear to have the FrontPage server extensions installed."
</p>
        <p>
The solution is quite simple: you need to run VS as an admin. To do this, you can
right click on the shortcut to VS from the start menu and select Run as Administrator. 
</p>
        <p>
If you want to always run VS as admin, do the following:
</p>
        <ul>
          <li>
Go to devenv.exe in the C:\Program Files\Microsoft Visual Studio 8\Common7\IDE directory.</li>
          <li>
Right click and go to properties. 
</li>
          <li>
Select the Compatibility tab.</li>
          <li>
Check the box at the bottom that says Run this program as an administrator (see below).</li>
        </ul>
        <p>
          <img src="http://www.softinsight.com/bnoyes/content/binary/runasadmin.png" />
        </p>
        <p>
The new security protections of UAC are there for a reason. You could just turn it
off and you wouldn't have problems like this in the first place. I'd encourage you
not to do that. Use it as a tool to teach you how to get your work done without admin
privilege to the extent possible. So in this case I prefer to only run VS as an admin
when I need to by doing the right click - Run as Administrator option instead of always
enabling it, but you will have to make these productivity vs security decisions for
yourself. 
<br /></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=435524e7-340c-4b4b-933d-a1c38d27e8ea" />
      </body>
      <title>ClickOnce Publishing from Visual Studio on Windows Vista</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</guid>
      <link>http://briannoyes.net/2006/11/05/ClickOncePublishingFromVisualStudioOnWindowsVista.aspx</link>
      <pubDate>Sun, 05 Nov 2006 19:27:21 GMT</pubDate>
      <description>&lt;p&gt;
If you haven't experienced Windows Vista yet, it is a very cool operating system,
but there are a lot of lessons to learn in getting up to speed in working in the new
environment. 
&lt;/p&gt;
&lt;p&gt;
The biggest thing to get used to if you haven't been running a non-admin account on
your XP machine is that there are probably a hundred things or more that you get away
with that you don't even know that the reason you get away with it is that you are
an admin.
&lt;/p&gt;
&lt;p&gt;
In Vista, even when logged in with an administrator account, you are still not allowed
to do administrator things without a privilege elevation through a mechanism called
User Access Control (UAC). UAC will seem like a living hell at first because all kinds
of things will stop working for you. For example, if you are only getting to some
files because you are an admin, and an app such as Quicken tries to run and access
those files, you will just get whatever kind of error the app vendor decided to surface
for a file I/O error. However, the best way to approach it is to treat it as a learning
experience to figure out how to avoid running things as admin unless you really need
to (i.e. give your user account permissions to the directories you really need, don't
rely on Admin privilege to give you access).
&lt;/p&gt;
&lt;p&gt;
Another example is when publishing with ClickOnce. When you publish from Visual Studio
to an http address, VS uses Frontpage Server Extensions (FPE) to create the virtual
directory and copy the files to it. First step on Windows Vista is that you need to
have IIS 6 Compatibility enabled (it is not on by default, nor is IIS installed by
default like XP). Once you do that, IIS 7 knows how to look like a Frontpage Server
Extension endpoint. The other thing is that you can only access the web server through
FPE if you are accessing as an admin from VS. 
&lt;/p&gt;
&lt;p&gt;
Even when logged in as an admin, VS will not be running with admin privilege by default.
As a result, when you try to publish a ClickOnce app you will get an obscure error
that says that FPE is not installed on the server. Specifically:
&lt;/p&gt;
&lt;p&gt;
"Failed to connect to 'http://localhost/WindowsApplication3/' with the following error:
Unable to create the Web 'http://localhost/WindowsApplication3/'.&amp;nbsp; The Web server
does not appear to have the FrontPage server extensions installed."
&lt;/p&gt;
&lt;p&gt;
The solution is quite simple: you need to run VS as an admin. To do this, you can
right click on the shortcut to VS from the start menu and select Run as Administrator. 
&lt;/p&gt;
&lt;p&gt;
If you want to always run VS as admin, do the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Go to devenv.exe in the C:\Program Files\Microsoft Visual Studio 8\Common7\IDE directory.&lt;/li&gt;
&lt;li&gt;
Right click and go to properties. 
&lt;/li&gt;
&lt;li&gt;
Select the Compatibility tab.&lt;/li&gt;
&lt;li&gt;
Check the box at the bottom that says Run this program as an administrator (see below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="http://www.softinsight.com/bnoyes/content/binary/runasadmin.png"&gt;
&lt;/p&gt;
&lt;p&gt;
The new security protections of UAC are there for a reason. You could just turn it
off and you wouldn't have problems like this in the first place. I'd encourage you
not to do that. Use it as a tool to teach you how to get your work done without admin
privilege to the extent possible. So in this case I prefer to only run VS as an admin
when I need to by doing the right click - Run as Administrator option instead of always
enabling it, but you will have to make these productivity vs security decisions for
yourself. 
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=435524e7-340c-4b4b-933d-a1c38d27e8ea" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,435524e7-340c-4b4b-933d-a1c38d27e8ea.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=fe63caf8-a84e-4cb4-a784-703835ac327e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fe63caf8-a84e-4cb4-a784-703835ac327e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One scenario people want to support is to have multiple versions of the same application
installed to a single machine/user's account. The <a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170">guidance
I put together for patterns and practices</a> has a walkthrough of setting this up.
For example, say you have a version 2.0.0.0 of an application that is your production
version, and you publish a new beta version (3.0.0.0) that you want a limited set
of users to access, but those same users need to be able to run both production and
beta side by side through ClickOnce on their machines (perhaps for feature comparison
testing).
</p>
        <p>
The first step is that you will need to have different deployment manifests for the
multiple versions you want a single user to run. You direct the user to launch from
each URL to the different deployment manifests and they will get a separate installation
on their machine... or will they? The answer depends on a hidden aspect of the ClickOnce
runtime regarding what the runtime considers a unique identity for an installed application.
</p>
        <p>
If you are not familiar with the things that ClickOnce does under the covers to install
an application on a client machine, it downloads and caches the deployment manifest,
the application manifest, and all of the application files. Those manifests have to
be signed by a publisher certificate that is cryptographically unique. Additionally,
the installed application has a product name that gets embedded in the deployment
manifest. 
</p>
        <p>
You might be tempted, as I was, to think that a unique product name, combined with
a separate deployment manifest would be sufficient to make the client machine treat
those installs as separate and distinct (such as setting the product names to "MyApp"
and "MyApp - Beta"). Unfortunately you would be wrong, as I was.
</p>
        <p>
There is actually a separate piece of information that the ClickOnce runtime uses
to distinguish one application from another - the application identity is set by an
identity set for the deployment manifest itself. This identity is normally created
by Visual Studio when publishing and is set to the deployment manifest name (i.e.
WindowsApplication1.application). You do not have control from Visual Studio to set
this to anything else. Through the mageui.exe SDK tool, or better yet my Manifest
Manager Utility included with the patterns and practices guidance, you can set this
application identity to any string that you like to uniquely identify multiple published
versions of a single application.
</p>
        <p>
So to address the scenario presented earlier, you can simply set the application identity
to MyApp for one version and MyApp-Beta for the other version, and you will be able
to side-by-side install those two copies of the app on the same machine.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=fe63caf8-a84e-4cb4-a784-703835ac327e" />
      </body>
      <title>ClickOnce Deployment Application Identity</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</guid>
      <link>http://briannoyes.net/2006/11/03/ClickOnceDeploymentApplicationIdentity.aspx</link>
      <pubDate>Fri, 03 Nov 2006 20:30:14 GMT</pubDate>
      <description>&lt;p&gt;
One scenario people want to support is to have multiple versions of the same application
installed to a single machine/user's account. The &lt;a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170"&gt;guidance
I put together for patterns and practices&lt;/a&gt; has a walkthrough of setting this up.
For example, say you have a version 2.0.0.0 of an application that is your production
version, and you publish a new beta version (3.0.0.0) that you want a limited set
of users to access, but those same users need to be able to run both production and
beta side by side through ClickOnce on their machines (perhaps for feature comparison
testing).
&lt;/p&gt;
&lt;p&gt;
The first step is that you will need to have different deployment manifests for the
multiple versions you want a single user to run. You direct the user to launch from
each URL to the different deployment manifests and they will get a separate installation
on their machine... or will they? The answer depends on a hidden aspect of the ClickOnce
runtime regarding what the runtime considers a unique identity for an installed application.
&lt;/p&gt;
&lt;p&gt;
If you are not familiar with the things that ClickOnce does under the covers to install
an application on a client machine, it downloads and caches the deployment manifest,
the application manifest, and all of the application files. Those manifests have to
be signed by a publisher certificate that is cryptographically unique. Additionally,
the installed application has a product name that gets embedded in the deployment
manifest. 
&lt;/p&gt;
&lt;p&gt;
You might be tempted, as I was, to think that a unique product name, combined with
a separate deployment manifest would be sufficient to make the client machine treat
those installs as separate and distinct (such as setting the product names to "MyApp"
and "MyApp - Beta"). Unfortunately you would be wrong, as I was.
&lt;/p&gt;
&lt;p&gt;
There is actually a separate piece of information that the ClickOnce runtime uses
to distinguish one application from another - the application identity is set by an
identity set for the deployment manifest itself. This identity is normally created
by Visual Studio when publishing and is set to the deployment manifest name (i.e.
WindowsApplication1.application). You do not have control from Visual Studio to set
this to anything else. Through the mageui.exe SDK tool, or better yet my Manifest
Manager Utility included with the patterns and practices guidance, you can set this
application identity to any string that you like to uniquely identify multiple published
versions of a single application.
&lt;/p&gt;
&lt;p&gt;
So to address the scenario presented earlier, you can simply set the application identity
to MyApp for one version and MyApp-Beta for the other version, and you will be able
to side-by-side install those two copies of the app on the same machine.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=fe63caf8-a84e-4cb4-a784-703835ac327e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,fe63caf8-a84e-4cb4-a784-703835ac327e.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=7ac94f25-c9e1-422d-a1c5-ec592801c223</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7ac94f25-c9e1-422d-a1c5-ec592801c223</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I recently put together a bunch of guidance
topics for Microsoft Patterns and Practices for doing ClickOnce deployments of CAB-based
applications. This guidance and the sample code is now available as a Community Resource
Kit and will eventually be incorporated into a future release of SCSF.<br /><br />
The resource kit also includes something a lot of people have been asking for - an
example of programming against the manifest APIs in the Microsoft.Build.Tasks.Deployment.ManifestUtilities
namespace. I wrote a Manifest Manager Utility as part of that effort and included
in the download code that makes common tasks such as updating application files a
lot easier. It takes care of signing both manifests at one to make sure they are in
sync, updates the deployment manifest reference to the app manifest and other things
like that. If you need to go beyond what it does, then you now have sample code available
to show you how to work with the APIs.<br /><br />
Another thing included in the kit is an example server side deployment repository
provider that allows you to take over the process of serving up manifests and application
files on the deployment server so that you could retrieve them from anywhere or even
generate some of the files on the fly.<br /><br />
Enjoy!<br /><a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170">Get
it here!</a><img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=7ac94f25-c9e1-422d-a1c5-ec592801c223" /></body>
      <title>SCSF ClickOnce Guidance Available</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</guid>
      <link>http://briannoyes.net/2006/11/02/SCSFClickOnceGuidanceAvailable.aspx</link>
      <pubDate>Thu, 02 Nov 2006 14:29:54 GMT</pubDate>
      <description>I recently put together a bunch of guidance topics for Microsoft Patterns and Practices for doing ClickOnce deployments of CAB-based applications. This guidance and the sample code is now available as a Community Resource Kit and will eventually be incorporated into a future release of SCSF.&lt;br&gt;
&lt;br&gt;
The resource kit also includes something a lot of people have been asking for - an
example of programming against the manifest APIs in the Microsoft.Build.Tasks.Deployment.ManifestUtilities
namespace. I wrote a Manifest Manager Utility as part of that effort and included
in the download code that makes common tasks such as updating application files a
lot easier. It takes care of signing both manifests at one to make sure they are in
sync, updates the deployment manifest reference to the app manifest and other things
like that. If you need to go beyond what it does, then you now have sample code available
to show you how to work with the APIs.&lt;br&gt;
&lt;br&gt;
Another thing included in the kit is an example server side deployment repository
provider that allows you to take over the process of serving up manifests and application
files on the deployment server so that you could retrieve them from anywhere or even
generate some of the files on the fly.&lt;br&gt;
&lt;br&gt;
Enjoy!&lt;br&gt;
&lt;a href="http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=941d2228-3bb5-42fd-8004-c08595821170"&gt;Get
it here!&lt;/a&gt;&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=7ac94f25-c9e1-422d-a1c5-ec592801c223" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,7ac94f25-c9e1-422d-a1c5-ec592801c223.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5efc94df-a619-4bbd-b401-34d0db3afe5a</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5efc94df-a619-4bbd-b401-34d0db3afe5a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've created the home page for my new book Smart Client Deployment with ClickOnce,
which will be available in printed form in a couple of months. It should also soon
be available on Safari Rough cuts. I'll blog an entry when that happens with a link,
so stay tuned. 
</p>
        <p>
You can see the book page and get the samples here: <a href="http://www.softinsight.com/clickoncebook">http://www.softinsight.com/clickoncebook</a></p>
        <p>
Many of the samples may not make a lot of sense without the book to walk you through
the process steps to use them for a particular ClickOnce deployment scenario, so make
sure to pick up a copy. 
</p>
        <p>
It is already available for purchase on Amazon: <a href="http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8">http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5efc94df-a619-4bbd-b401-34d0db3afe5a" />
      </body>
      <title>ClickOnce Book Site and Samples up</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</guid>
      <link>http://briannoyes.net/2006/10/23/ClickOnceBookSiteAndSamplesUp.aspx</link>
      <pubDate>Mon, 23 Oct 2006 15:41:56 GMT</pubDate>
      <description>&lt;p&gt;
I've created the home page for my new book Smart Client Deployment with ClickOnce,
which will be available in printed form in a couple of months. It should also soon
be available on Safari Rough cuts. I'll blog an entry when that happens with a link,
so stay tuned. 
&lt;/p&gt;
&lt;p&gt;
You can see the book page and get the samples here: &lt;a href="http://www.softinsight.com/clickoncebook"&gt;http://www.softinsight.com/clickoncebook&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Many of the samples may not make a lot of sense without the book to walk you through
the process steps to use them for a particular ClickOnce deployment scenario, so make
sure to pick up a copy. 
&lt;/p&gt;
&lt;p&gt;
It is already available for purchase on Amazon: &lt;a href="http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8"&gt;http://www.amazon.com/Smart-Client-Deployment-ClickOnce-Applications/dp/0321197690/sr=8-1/qid=1161618037/ref=pd_bbs_sr_1/102-0199676-4803377?ie=UTF8&lt;/a&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5efc94df-a619-4bbd-b401-34d0db3afe5a" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5efc94df-a619-4bbd-b401-34d0db3afe5a.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I wrote a whitepaper on administering ClickOnce deployments earlier this year for
the product team. It took a bit for it to get through the MSDN publishing process,
but it is finally available.
</p>
        <p>
 
</p>
        <p>
You can check it out here: <font size="2"></font></p>
        <p>
          <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp">
            <u>
              <font color="#0000ff" size="2">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp
</font>
            </u>
          </a>
        </p>
        <p>
This whitepaper covers handling tracking and authentication of users on the deployment
server, as well as giving an explanation of what is going on under the covers during
the publishing and deployment process.
</p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0" />
      </body>
      <title>Administering ClickOnce Deployments whitepaper</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</guid>
      <link>http://briannoyes.net/2006/10/05/AdministeringClickOnceDeploymentsWhitepaper.aspx</link>
      <pubDate>Thu, 05 Oct 2006 11:06:00 GMT</pubDate>
      <description>&lt;p&gt;
I wrote a whitepaper on administering ClickOnce deployments earlier this year for
the product team. It took a bit for it to get through the MSDN publishing process,
but it is finally available.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
You can check it out here: &lt;font size=2&gt;
&lt;/p&gt;
&lt;p&gt;
&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp"&gt;&lt;u&gt;&lt;font color=#0000ff size=2&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/admincodep.asp
&lt;/u&gt;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This whitepaper covers handling tracking and authentication of users on the deployment
server, as well as giving an explanation of what is going on under the covers during
the publishing and deployment process.
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5cea47e6-f28d-4a6b-9466-41fa16c3f1d0" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5cea47e6-f28d-4a6b-9466-41fa16c3f1d0.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=6b5698ab-e8f6-46b0-a286-b221b0bebe1e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6b5698ab-e8f6-46b0-a286-b221b0bebe1e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm very pleased to announce that my ClickOnce book is done. I still have to go through
the production cycle, which involves reviewing and responding to changes and recommendations
by the copy editors. But the content is done, tech reviewed, and ready to go other
than that. The cover has been designed and is looking pretty sweet:
</p>
        <p>
 <img style="WIDTH: 281px; HEIGHT: 367px" height="605" alt="Book cover" hspace="0" src="http://www.softinsight.com/clickoncebook/ClickOnceCover.png" width="282" align="baseline" border="0" /></p>
        <p>
It was actually the publisher's idea to incorporate an aircraft on the cover, which
I of course loved with <a href="http://www.softinsight.com/LifeBeforeProgramming.aspx">my
background flying F-14's</a>. It actually makes a lot of sense if you know much about
the mission of naval aviation. Our job was to deploy - deploy on the carrier to bring
the military might of the US to wherever it was needed, and to deploy weapons on target.
ClickOnce is about deploying a different kind of weapon (the smart client app
you write) on target (the client desktop). But the metaphor fits in my mind.
</p>
        <p>
The book should be up on Rough Cuts (<a href="http://my.safaribooksonline.com/roughcuts">http://my.safaribooksonline.com/roughcuts</a>)
in the very near future in case you want to get your hands on it sooner than when
it comes out in print (probably January by the time we get through production).
</p>
        <p>
There is nothing quite like the feeling of finishing a book after many months of having
it hanging over your head as that thing you gotta find time for. Now I can tend to
the many projects I have sidelined while trying to wrap this book up while maintaining
a full consulting load. My wife Robin will be quite glad that I don't have "the book"
as an excuse any more. :)
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=6b5698ab-e8f6-46b0-a286-b221b0bebe1e" />
      </body>
      <title>Smart Client Deployment with ClickOnce - Final Manuscript Complete!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</guid>
      <link>http://briannoyes.net/2006/09/06/SmartClientDeploymentWithClickOnceFinalManuscriptComplete.aspx</link>
      <pubDate>Wed, 06 Sep 2006 20:47:40 GMT</pubDate>
      <description>&lt;p&gt;
I'm very pleased to announce that my ClickOnce book is done. I still have to go through
the production cycle, which involves reviewing and responding to changes and recommendations
by the copy editors. But the content is done, tech reviewed, and ready to go other
than that. The cover has been designed and is looking pretty sweet:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;img style="WIDTH: 281px; HEIGHT: 367px" height=605 alt="Book cover" hspace=0 src="http://www.softinsight.com/clickoncebook/ClickOnceCover.png" width=282 align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
It was actually the publisher's idea to incorporate an aircraft on the cover, which
I of course loved with &lt;a href="http://www.softinsight.com/LifeBeforeProgramming.aspx"&gt;my
background flying F-14's&lt;/a&gt;. It actually makes a lot of sense if you know much about
the mission of naval aviation. Our job was to deploy - deploy on the carrier to bring
the military might of the US to wherever it was needed, and to deploy weapons on target.
ClickOnce is about deploying a different kind of weapon&amp;nbsp;(the smart client app
you write) on target (the client desktop). But the metaphor fits in my mind.
&lt;/p&gt;
&lt;p&gt;
The book should be up on&amp;nbsp;Rough Cuts (&lt;a href="http://my.safaribooksonline.com/roughcuts"&gt;http://my.safaribooksonline.com/roughcuts&lt;/a&gt;)
in the very near future in case you want to get your hands on it sooner than when
it comes out in print (probably January by the time we get through production).
&lt;/p&gt;
&lt;p&gt;
There is nothing quite like the feeling of finishing a book after many months of having
it hanging over your head as that thing you gotta find time for. Now I can tend to
the many projects I have sidelined while trying to wrap this book up while maintaining
a full consulting load. My wife Robin will be quite glad that I don't have "the book"
as an excuse any more. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=6b5698ab-e8f6-46b0-a286-b221b0bebe1e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,6b5698ab-e8f6-46b0-a286-b221b0bebe1e.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Publishing</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=78d107d1-3937-4d8d-81d9-73cb6ae18eee</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=78d107d1-3937-4d8d-81d9-73cb6ae18eee</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've had several people ask questions surrounding how to get a pfx file to use for
ClickOnce manifest signing when you have purchased a real certificate from a provider
like Verisign or Comodo (<a href="http://www.instantssl.com">www.instantssl.com</a> -
a great, cheaper alternative that has its root issuer already installed as a trusted
root certification authority).
</p>
        <p>
Usually when you purchase a certificate, the process involves going to the provider's
site, such as instantssl.com, providing your contact information online and entering
payment information. The certificate issuer must then verify your identity through
some means (corporate DUNS number, business license, bank statement, utility bill,
etc.). Once they have done that, they will allow you to download and install your
certificate through your browser. They should also provide you with a separate download
or generation of a .pvk (private key) file that will contain the private key portion
of your certificate. They may or may not provide you a download of a .spc or .cer
file that just contains the public key portion of your certificate. If they do not
provide a download of the .spc file, you may have to export it from your certificate
store after the browser installs it as described later in this post.
</p>
        <p>
Step 1: Download and install pvkimprt.exe<br />
If you have a .spc or .cer file and a .pvk file, then you have the pieces you need
to create a .pfx file. You will need to download,expand, and install the pfximprt
tool,  which you can get here:
</p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;displaylang=EN">http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;displaylang=EN</a>
        </p>
        <p>
Generate an install a public/private key pair certificate in your store<br />
To generate a pfx file from an spc/cer and pvk file, do the following:<br />
1. Open a command prompt and run pvkimprt, passing the spc and pvk file:<br />
C:\&gt;"C:\Program Files\Pvkimprt\pvkimprt.exe" softinsight_comodo.spc softinsight_comodo.pvk<br />
2. You will be prompted for a password for the pvk file as shown in Figure 1. The
password is the one you provided when you ordered the certificate or when the pvk
file was issued to you.
</p>
        <p>
          <img alt="password prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure1.png" align="baseline" border="0" />
        </p>
        <p>
Figure 1
</p>
        <p>
3. After entering your password and clicking OK, the certificate import wizard will
launch as shown in Figure 2.<br /><img alt="start import wizard" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure2.png" align="baseline" border="0" /></p>
        <p>
Figure 2
</p>
        <p>
4. Click Next, and you will be prompted as shown in Figure 3 for selecting the store.
Just allow it to automatically select the store (the default) and click Next.<br /><img alt="select cert store" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure3.png" align="baseline" border="0" /></p>
        <p>
Figure 3
</p>
        <p>
          <br />
5. You will then just see the summary as shown in Figure 4, click Finish.<br /><img alt="Import summary" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure4.png" align="baseline" border="0" /></p>
        <p>
Figure 4
</p>
        <p>
6. You should now have a publisher certificate installed into your personal certificate
store that contains both the public and private keys for the same certificate. Now
you need to export it to a .pfx file that you can back up and use on other machines.
Open certmgr by running certmgr.exe from a Visual Studio 2005 command prompt (see
Figure 5).<br /><img alt="certmgr.exe" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure5.png" align="baseline" border="0" /></p>
        <p>
Figure 5
</p>
        <p>
7. Find the certificate you just imported (by publisher name) in the list in the Personal
tab (selected by default). Press the Export button.<br />
8. The first step of the export wizard will be presented (see Figure 6). Press Next.<br /><img alt="Start export wizard" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure6.png" align="baseline" border="0" /></p>
        <p>
Figure 6
</p>
        <p>
9. The next step asks whether you want to export the private key. If you are generating
a pfx file for ClickOnce deployment, the answer here must be yes, which is not selected
by default (see Figure 7). Press Next.<br /><img alt="Export private key prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure7.png" align="baseline" border="0" /></p>
        <p>
Figure 7
</p>
        <p>
10. The next step asks what export file format you want, the default is fine (see
Figure 8). Press Next.<br /><img alt="Export file format selection" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure8.png" align="baseline" border="0" /></p>
        <p>
Figure 8
</p>
        <p>
11. The next step asks for a password to protect the pfx file that will be output,
use a secure password and be careful who you give it to because this is the last line
of defense if someone is able to get their hands on your physical pfx file to prevent
them from being able to use it. Enter a password twice and click Next (see Figure
9)<br /><img alt="Password prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure9.png" align="baseline" border="0" /></p>
        <p>
Figure 9
</p>
        <p>
12. The next step has you enter the path to the output file. You can press the browse
button and navigate to the desired folder and select the file format from the file
type drop down, or you can just type in a path (see Figure 10). Press Next.<br /><img alt="Output file path" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure10.png" align="baseline" border="0" /></p>
        <p>
Figure 10
</p>
        <p>
13. You will see the summary screen, press Finish to generate the file (see Figure
11).<br /><img alt="Summary screen" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure11.png" align="baseline" border="0" /></p>
        <p>
Figure 11
</p>
        <p>
14. You will see a message box showing that the export was successful (see Figure
12).<br /><img alt="Finished prompt" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure12.png" align="baseline" border="0" /></p>
        <p>
Figure 12
</p>
        <p>
At this point you now have a pfx file that you can point to with your Visual Studio
project Signing tab properties to sign your ClickOnce manifests. You can share that
file with other trusted members of your team and they can use it to sign your applications
to put them into production.
</p>
        <p>
Just realize that anyone who gets their hands on that file and knows or can guess
the password will be able to sign and publish applications that look like they come
from you, so you need to treat those files (particularly the pfx and pvk) very carefully.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
          <br />
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=78d107d1-3937-4d8d-81d9-73cb6ae18eee" />
      </body>
      <title>Managing ClickOnce publisher certificate files </title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</guid>
      <link>http://briannoyes.net/2006/06/23/ManagingClickOncePublisherCertificateFiles.aspx</link>
      <pubDate>Fri, 23 Jun 2006 23:04:18 GMT</pubDate>
      <description>&lt;p&gt;
I've had several people ask questions surrounding how to get a pfx file to use for
ClickOnce manifest signing when you have purchased a real certificate from a provider
like Verisign or Comodo (&lt;a href="http://www.instantssl.com"&gt;www.instantssl.com&lt;/a&gt; -
a great, cheaper alternative that has its root issuer already installed as a trusted
root certification authority).
&lt;/p&gt;
&lt;p&gt;
Usually when you purchase a certificate, the process involves going to the provider's
site, such as instantssl.com, providing your contact information online and entering
payment information. The certificate issuer must then verify your identity through
some means (corporate DUNS number, business license, bank statement, utility bill,
etc.). Once they have done that, they will allow you to download and install your
certificate through your browser. They should also provide you with a separate download
or generation of a .pvk (private key) file that will contain the private key portion
of your certificate. They may or may not provide you a download of a .spc or .cer
file that just contains the public key portion of your certificate. If they do not
provide a download of the .spc file, you may have to export it from your certificate
store after the browser installs it as described later in this post.
&lt;/p&gt;
&lt;p&gt;
Step 1: Download and install pvkimprt.exe&lt;br&gt;
If you have a .spc or .cer file and a .pvk file, then you have the pieces you need
to create a .pfx file. You will need to download,expand, and install the pfximprt
tool,&amp;nbsp; which you can get here:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;amp;displaylang=EN"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&amp;amp;displaylang=EN&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Generate an install a public/private key pair certificate in your store&lt;br&gt;
To generate a pfx file from an spc/cer and pvk file, do the following:&lt;br&gt;
1. Open a command prompt and run pvkimprt, passing the spc and pvk file:&lt;br&gt;
C:\&amp;gt;"C:\Program Files\Pvkimprt\pvkimprt.exe" softinsight_comodo.spc softinsight_comodo.pvk&lt;br&gt;
2. You will be prompted for a password for the pvk file as shown in Figure 1. The
password is the one you provided when you ordered the certificate or when the pvk
file was issued to you.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="password prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure1.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 1
&lt;/p&gt;
&lt;p&gt;
3. After entering your password and clicking OK, the certificate import wizard will
launch as shown in Figure 2.&lt;br&gt;
&lt;img alt="start import wizard" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure2.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 2
&lt;/p&gt;
&lt;p&gt;
4. Click Next, and you will be prompted as shown in Figure 3 for selecting the store.
Just allow it to automatically select the store (the default) and click Next.&lt;br&gt;
&lt;img alt="select cert store" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure3.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 3
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
5. You will then just see the summary as shown in Figure 4, click Finish.&lt;br&gt;
&lt;img alt="Import summary" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure4.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 4
&lt;/p&gt;
&lt;p&gt;
6. You should now have a publisher certificate installed into your personal certificate
store that contains both the public and private keys for the same certificate. Now
you need to export it to a .pfx file that you can back up and use on other machines.
Open certmgr by running certmgr.exe from a Visual Studio 2005 command prompt (see
Figure 5).&lt;br&gt;
&lt;img alt=certmgr.exe hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure5.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 5
&lt;/p&gt;
&lt;p&gt;
7. Find the certificate you just imported (by publisher name) in the list in the Personal
tab (selected by default). Press the Export button.&lt;br&gt;
8. The first step of the export wizard will be presented (see Figure 6). Press Next.&lt;br&gt;
&lt;img alt="Start export wizard" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure6.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 6
&lt;/p&gt;
&lt;p&gt;
9. The next step asks whether you want to export the private key. If you are generating
a pfx file for ClickOnce deployment, the answer here must be yes, which is not selected
by default (see Figure 7). Press Next.&lt;br&gt;
&lt;img alt="Export private key prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure7.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 7
&lt;/p&gt;
&lt;p&gt;
10. The next step asks what export file format you want, the default is fine (see
Figure 8). Press Next.&lt;br&gt;
&lt;img alt="Export file format selection" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure8.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 8
&lt;/p&gt;
&lt;p&gt;
11. The next step asks for a password to protect the pfx file that will be output,
use a secure password and be careful who you give it to because this is the last line
of defense if someone is able to get their hands on your physical pfx file to prevent
them from being able to use it. Enter a password twice and click Next (see Figure
9)&lt;br&gt;
&lt;img alt="Password prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure9.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 9
&lt;/p&gt;
&lt;p&gt;
12. The next step has you enter the path to the output file. You can press the browse
button and navigate to the desired folder and select the file format from the file
type drop down, or you can just type in a path (see Figure 10). Press Next.&lt;br&gt;
&lt;img alt="Output file path" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure10.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 10
&lt;/p&gt;
&lt;p&gt;
13. You will see the summary screen, press Finish to generate the file (see Figure
11).&lt;br&gt;
&lt;img alt="Summary screen" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure11.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 11
&lt;/p&gt;
&lt;p&gt;
14. You will see a message box showing that the export was successful (see Figure
12).&lt;br&gt;
&lt;img alt="Finished prompt" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/pfxfiles/Figure12.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Figure 12
&lt;/p&gt;
&lt;p&gt;
At this point you now have a pfx file that you can point to with your Visual Studio
project Signing tab properties to sign your ClickOnce manifests. You can share that
file with other trusted members of your team and they can use it to sign your applications
to put them into production.
&lt;/p&gt;
&lt;p&gt;
Just realize that anyone who gets their hands on that file and knows or can guess
the password will be able to sign and publish applications that look like they come
from you, so you need to treat those files (particularly the pfx and pvk) very carefully.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=78d107d1-3937-4d8d-81d9-73cb6ae18eee" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,78d107d1-3937-4d8d-81d9-73cb6ae18eee.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=c34df3c8-8129-4b24-ab89-890fa9540603</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c34df3c8-8129-4b24-ab89-890fa9540603</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It was a crazy week at TechEd last week. So crazy, no time to write or consume blogs.
I gave two breakout sessions (Real World ClickOnce and Windows Forms: Build Enterprise
Ready Forms Applications) and a Birds of Feather session (Windows Workflow Foundation).
</p>
        <p>
You can get the slides and demos from the sessions here:
</p>
        <p>
Real World ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV318__RealWorldClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/RealWorldClickOnceDemos.zip">Demos</a></p>
        <p>
Windows Forms: Build Enterprise Ready Forms Applications:  <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV332__BuildEnterpriseReadyFormsApps.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/TechEd06/EnterpriseFormsApplicationsDemos.zip">Demos</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=c34df3c8-8129-4b24-ab89-890fa9540603" />
      </body>
      <title>Another TechEd Complete - Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</guid>
      <link>http://briannoyes.net/2006/06/19/AnotherTechEdCompleteSlidesAndDemos.aspx</link>
      <pubDate>Mon, 19 Jun 2006 13:27:37 GMT</pubDate>
      <description>&lt;p&gt;
It was a crazy week at TechEd last week. So crazy, no time to write or consume blogs.
I gave two breakout sessions (Real World ClickOnce and Windows Forms: Build Enterprise
Ready Forms Applications) and a Birds of Feather session (Windows Workflow Foundation).
&lt;/p&gt;
&lt;p&gt;
You can get the slides and demos from the sessions here:
&lt;/p&gt;
&lt;p&gt;
Real World ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV318__RealWorldClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/RealWorldClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Windows Forms: Build Enterprise Ready Forms Applications:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/DEV332__BuildEnterpriseReadyFormsApps.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/TechEd06/EnterpriseFormsApplicationsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=c34df3c8-8129-4b24-ab89-890fa9540603" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,c34df3c8-8129-4b24-ab89-890fa9540603.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=0f4fc3e0-f892-4083-b432-a201fd3381dc</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0f4fc3e0-f892-4083-b432-a201fd3381dc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blog.ziffdavis.com/devlife/">Julie Lerman</a> has a <a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx">nice
post </a>about creating a desktop icon as part of a ClickOnce install - a fairly common
question / request, and very representative of the kinds of "custom" things people
would like to be able to do as part of a ClickOnce installation.
</p>
        <p>
There were specific discussions about the option to create a desktop icon in some
design reviews in Redmond I took part in several years ago. If I remember correctly,
that one was dismissed mostly because it is discouraged to add desktop shortcuts as
part of an install, especially without prompting the user to let them choose.
</p>
        <p>
But part of this kind of desire really comes back to understanding the trust model
of ClickOnce in general.
</p>
        <p>
The trust issues of ClickOnce are twofold:<br />
1. ClickOnce should not make any modifications to the local machine at install
time that could affect other applications or data on the machine.<br />
2. ClickOnce should provide runtime protections to avoid allowing the application
to do harm to the local machine.
</p>
        <p>
For #1, this means that you cannot install things to the GAC, add things to the registry,
put things in specific places in the file system, etc. Any of those things could affect
other apps and users on the machine, which means that administrators are not going
to trust low-privilege users to perform ClickOnce installs. As a result, the model
will not get adopted in enterprise environments, which is the primary target environment
for ClickOnce - to replace those darn intranet web apps that companies create for
ease of maintenance with smart client apps that give the user a better experience
but are just as easy to maintain because of ClickOnce.
</p>
        <p>
So the bottom line for #1 is that the only forms of customization you have available
to you directly through ClickOnce is specifying:
</p>
        <p>
- Whether the app is available offline (meaning you get a Start menu item and an Add
or Remove Programs item)
</p>
        <p>
- When updates checks will occur
</p>
        <p>
- What the publisher name is - which sets what the program group in the Start menu
is
</p>
        <p>
- What the application name is - which sets the name of the program in the Start menu
and Add or Remove Programs
</p>
        <p>
- What the application icon is - through the Visual Studio application settings, and
used for the icon in the Start menu item and Add or Remove Programs
</p>
        <p>
There are a number of other assorted options you can set through the Publish tab,
but they all really affect how the publication and deployment occurs, but none are
in the form of explicit control over what goes where.
</p>
        <p>
For #2 - You specify what runtime permissions the application will have as part of
its publish settings (through the Security tab in VS), which end up as a list of required
permissions in the application manifest. If those permissions exceed what the application
would be granted by Code Access Security at runtime based on the zone of the launch
URL (Internet, LocalIntranet, MyComputer, TrustedSites, or RestrictedSites), then
the permissions have to be elevated either through user prompting (the default, ClickTwice
experience) or through the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/clickoncetrustpub.asp">trusted
publishers capability of ClickOnce</a>.
</p>
        <p>
The fact is that you can overcome or workaround any limitations caused by #1 by exploiting
#2. If you request full trust for your application, code in your application can do
whatever you want it to do when your application first starts up. However, this requires
one big assumption - you are also assuming the user who is running your application
has sufficient privilege to do whatever it is that your code will try to do. This
violates one of the goals of ClickOnce - to provide a deployment mechanism that can
be used by low privilege users. So if you write some custom code in your app that
tries to create a registry key - your app will have to have Registry permission through
ClickOnce, and the user will have to have permission to create a key wherever your
app is trying to create it.
</p>
        <p>
As Julie <a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx">points
out</a>, to create the Desktop icon with your own code, the user doesn't need any
special permissions because anyone can add a shortcut to their own desktop, but you
will need several high trust permissions including unmanaged code execution, which
basically means most people will just elevate the application to full trust to get
it done. Elevating to full trust is definitely something to avoid if you can.
</p>
        <p>
The recommended way of addressing a lot of scenarios that would require high-privilege
custom startup code is to create those things through the <a href="http://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/">Bootstrapper</a> as
a prerequisite. A desktop icon is not really a good candidate for that, but pre-deploying
something like GAC components is. Making something a prerequisite may allow you
to avoid requiring full trust for your application.
</p>
        <p>
However, the dirty little truth about Full Trust is that even though you should always
try to avoid jumping all the way to full trust, there are many things that you will
likely need to do in any meaningful ClickOnce app that will require you to go to full
trust. Examples include:
</p>
        <ul>
          <li>
Using the ClickOnce API ApplicationDeployment class for just about anything, such
as checking if this is the first run of a given version to execute your custom code,
or to perform on demand updates.</li>
          <li>
Using WCF for remote communications</li>
          <li>
Using Windows Workflow in your Windows Forms application</li>
        </ul>
        <p>
One way to add protections back into your application even if you do have to request
full trust for the application as a whole is to have sections of code where you restrict
permissions below that level. You can do this through Code Access Security IStackWalk
modifiers to Deny certain permissions or PermitOnly certain permissions. You can do
this to bracket out a section of code (for example where you call out to some third
party component to make sure that they are not doing something like reading/writing
from your disk or sending information over the web for data /intelligence collection
purposes). The details for doing this are too involved for this post, but I do cover
it in my upcoming ClickOnce book and the underpinnings from a CAS perspective are
covered well in my colleague Juval Lowy's <a href="http://www.amazon.com/gp/product/0596102070/102-7219285-7363314?v=glance&amp;n=283155">Programming
.NET Components, Second Edition</a>.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0f4fc3e0-f892-4083-b432-a201fd3381dc" />
      </body>
      <title>ClickOnce Trust Model - What Should and Shouldn't You Be Able To Do Through a ClickOnce Install</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</guid>
      <link>http://briannoyes.net/2006/05/29/ClickOnceTrustModelWhatShouldAndShouldntYouBeAbleToDoThroughAClickOnceInstall.aspx</link>
      <pubDate>Mon, 29 May 2006 15:27:35 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blog.ziffdavis.com/devlife/"&gt;Julie Lerman&lt;/a&gt; has a &lt;a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx"&gt;nice
post &lt;/a&gt;about creating a desktop icon as part of a ClickOnce install - a fairly common
question / request, and very representative of the kinds of "custom" things people
would like to be able to do as part of a ClickOnce installation.
&lt;/p&gt;
&lt;p&gt;
There were specific discussions about the option to create a desktop icon in some
design reviews in Redmond I took part in several years ago. If I remember correctly,
that one was dismissed mostly because it is discouraged to add desktop shortcuts as
part of an install, especially without prompting the user to let them choose.
&lt;/p&gt;
&lt;p&gt;
But part of this kind of desire really comes back to understanding the trust model
of ClickOnce in general.
&lt;/p&gt;
&lt;p&gt;
The trust issues of ClickOnce are twofold:&lt;br&gt;
1.&amp;nbsp;ClickOnce should not make any modifications to the local machine at install
time that could affect other applications or data on the machine.&lt;br&gt;
2.&amp;nbsp;ClickOnce should provide runtime protections to avoid allowing the application
to do harm to the local machine.
&lt;/p&gt;
&lt;p&gt;
For #1, this means that you cannot install things to the GAC, add things to the registry,
put things in specific places in the file system, etc. Any of those things could affect
other apps and users on the machine, which means that administrators are not going
to trust low-privilege users to perform ClickOnce installs. As a result, the model
will not get adopted in enterprise environments, which is the primary target environment
for ClickOnce - to replace those darn intranet web apps that companies create for
ease of maintenance with smart client apps that give the user a better experience
but are just as easy to maintain because of ClickOnce.
&lt;/p&gt;
&lt;p&gt;
So the bottom line for #1 is that the only forms of customization you have available
to you directly through ClickOnce is specifying:
&lt;/p&gt;
&lt;p&gt;
- Whether the app is available offline (meaning you get a Start menu item and an Add
or Remove Programs item)
&lt;/p&gt;
&lt;p&gt;
- When updates checks will occur
&lt;/p&gt;
&lt;p&gt;
- What the publisher name is - which sets what the program group in the Start menu
is
&lt;/p&gt;
&lt;p&gt;
- What the application name is - which sets the name of the program in the Start menu
and Add or Remove Programs
&lt;/p&gt;
&lt;p&gt;
- What the application icon is - through the Visual Studio application settings, and
used for the icon in the Start menu item and Add or Remove Programs
&lt;/p&gt;
&lt;p&gt;
There are a number of other assorted options you can set through the Publish tab,
but they all really affect how the publication and deployment occurs, but none are
in the form of explicit control over what goes where.
&lt;/p&gt;
&lt;p&gt;
For #2 - You specify what runtime permissions the application will have as part of
its publish settings (through the Security tab in VS), which end up as a list of required
permissions in the application manifest. If those permissions exceed what the application
would be granted by Code Access Security at runtime based on the zone of the launch
URL (Internet, LocalIntranet, MyComputer, TrustedSites, or RestrictedSites), then
the permissions have to be elevated either through user prompting (the default, ClickTwice
experience) or through the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwinforms/html/clickoncetrustpub.asp"&gt;trusted
publishers capability of ClickOnce&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The fact is that you can overcome or workaround any limitations caused by #1 by exploiting
#2. If you request full trust for your application, code in your application can do
whatever you want it to do when your application first starts up. However, this requires
one big assumption - you are also assuming the user who is running your application
has sufficient privilege to do whatever it is that your code will try to do. This
violates one of the goals of ClickOnce - to provide a deployment mechanism that can
be used by low privilege users. So if you write some custom code in your app that
tries to create a registry key - your app will have to have Registry permission through
ClickOnce, and the user will have to have permission to create a key wherever your
app is trying to create it.
&lt;/p&gt;
&lt;p&gt;
As Julie &lt;a href="http://blog.ziffdavis.com/devlife/archive/2006/05/28/41839.aspx"&gt;points
out&lt;/a&gt;, to create the Desktop icon with your own code, the user doesn't need any
special permissions because anyone can add a shortcut to their own desktop, but&amp;nbsp;you
will need several high trust permissions including unmanaged code execution, which
basically means most people will just elevate the application to full trust to get
it done. Elevating to full trust is definitely something to avoid if you can.
&lt;/p&gt;
&lt;p&gt;
The recommended way of addressing a lot of scenarios that would require high-privilege
custom startup code is to create those things through the &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/10/Bootstrapper/"&gt;Bootstrapper&lt;/a&gt;&amp;nbsp;as
a prerequisite. A desktop icon is not really a good candidate for that, but pre-deploying
something like GAC components is. Making&amp;nbsp;something a prerequisite may allow you
to avoid requiring full trust for your application.
&lt;/p&gt;
&lt;p&gt;
However, the dirty little truth about Full Trust is that even though you should always
try to avoid jumping all the way to full trust, there are many things that you will
likely need to do in any meaningful ClickOnce app that will require you to go to full
trust. Examples include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Using the ClickOnce API ApplicationDeployment class for just about anything, such
as checking if this is the first run of a given version to execute your custom code,
or to perform on demand updates.&lt;/li&gt;
&lt;li&gt;
Using WCF for remote communications&lt;/li&gt;
&lt;li&gt;
Using Windows Workflow in your Windows Forms application&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
One way to add protections back into your application even if you do have to request
full trust for the application as a whole is to have sections of code where you restrict
permissions below that level. You can do this through Code Access Security IStackWalk
modifiers to Deny certain permissions or PermitOnly certain permissions. You can do
this to bracket out a section of code (for example where you call out to some third
party component to make sure that they are not doing something like reading/writing
from your disk or sending information over the web for data /intelligence collection
purposes). The details for doing this are too involved for this post, but I do cover
it in my upcoming ClickOnce book and the underpinnings from a CAS perspective are
covered well in my colleague Juval Lowy's &lt;a href="http://www.amazon.com/gp/product/0596102070/102-7219285-7363314?v=glance&amp;amp;n=283155"&gt;Programming
.NET Components, Second Edition&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=0f4fc3e0-f892-4083-b432-a201fd3381dc" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,0f4fc3e0-f892-4083-b432-a201fd3381dc.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=652b2d44-012e-42f4-bba8-4ad40ed63f68</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=652b2d44-012e-42f4-bba8-4ad40ed63f68</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was working with Paul Sheriff of PDSA this week to ClickOnce deploy a reporting
tool we use for the <a href="http://msdn.microsoft.com/isv/rd/">Regional Directors
program</a>. We ran into a problem where we got the following error when we tried
to publish:
</p>
        <p>
          <img alt="CAPICOM Error" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/CAPICOMError.gif" align="baseline" border="0" />
        </p>
        <p>
The resolution was to obtain the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&amp;DisplayLang=en">correct
version of the CAPICOM.dll</a>, drop it into the \SDK\bin directory where the SignTool.exe
lives (C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin with a default VS install),
and then register the library with Regsvr32.exe). Since it is a COM library for the
CryptoAPI, it can actually live anywhere on your machine once it is registered.
</p>
        <p>
Not sure how this was not there on the machine in question, it normally gets installed
and registered when you install VS according to the ClickOnce product team folks.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=652b2d44-012e-42f4-bba8-4ad40ed63f68" />
      </body>
      <title>CAPICOM Build Error on ClickOnce Publishing</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</guid>
      <link>http://briannoyes.net/2006/05/26/CAPICOMBuildErrorOnClickOncePublishing.aspx</link>
      <pubDate>Fri, 26 May 2006 14:53:46 GMT</pubDate>
      <description>&lt;p&gt;
I was working with Paul Sheriff of PDSA this week to ClickOnce deploy a reporting
tool we use for the &lt;a href="http://msdn.microsoft.com/isv/rd/"&gt;Regional Directors
program&lt;/a&gt;. We ran into a problem where we got the following error when we tried
to publish:
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="CAPICOM Error" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/CAPICOMError.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
The resolution was to obtain the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&amp;amp;DisplayLang=en"&gt;correct
version of the CAPICOM.dll&lt;/a&gt;, drop it into the \SDK\bin directory where the SignTool.exe
lives (C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin with a default VS install),
and then register the library with Regsvr32.exe). Since it is a COM library for the
CryptoAPI, it can actually live anywhere on your machine once it is registered.
&lt;/p&gt;
&lt;p&gt;
Not sure how this was not there on the machine in question, it normally gets installed
and registered when you install VS according to the ClickOnce product team folks.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=652b2d44-012e-42f4-bba8-4ad40ed63f68" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,652b2d44-012e-42f4-bba8-4ad40ed63f68.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=bd37cddc-3574-49fc-b226-a7df516ecb43</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bd37cddc-3574-49fc-b226-a7df516ecb43</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A common question with respect to ClickOnce is how to take an application that you
have published and tested on your local machine or a local development server and
move that application into production. The steps involved are not particularly complex,
but do involve using some other tools to get it done and are not easy to figure out
on your own unless you have a solid understanding of ClickOnce manifests, signing,
and how they relate to the launch mechanisms of ClickOnce.
</p>
        <p>
A key pre-requisite for doing this is that the administrator who will be placing the
application on the target machine will need to have the publisher certificate that
will be used to sign the production application available. Usually in large organizations
the developers will not have access to the company's real certificate to do their
development anyway, it will be up to the IT Administrator to get that certificate
and do the final signing of the applications anyway.
</p>
        <p>
          <strong>Step 1: Move your application files to the target machine.<br /></strong>Assuming you have published your application with Visual Studio to your local
machine or another test server in your development environment, the application files
are contained in the virtual directory or folder that you specified as the Publish
Location within Visual Studio. The deployment manifest, Bootstrapper setup.exe, publish.htm
deployment page, and version specific deployment manifests are located in the root
folder. For each version you published to that location, there is a subfolder that
contains the application manifest and application files for that version. You might
do this by zipping up the appropriate files and folders and just giving the zip file
to the administrator who will put it into production.
</p>
        <p>
To move the current version into production, you will need to copy the deployment
manifest, setup.exe, version-specific manifest and sub-folder for the version you
want to publish to the target machine deployment folder. You only need to include
the publish.htm file if you intend to use that test page directly to expose the application
to end users. But if you are going to put a link to the deployment manifest in some
other page or send a link via email, you don't need to include the publish.htm page.
</p>
        <p>
          <strong>Step 2 (Optional): Make needed changes to application files<br /></strong>If you need to change something in the application files, such as changing
a setting in the application configuration file or updating some graphics files, you
will need to update the application manifest after modifying the application files
themselves. So make the modifications needed in your application files.
</p>
        <p>
          <strong>Step 3: (Only needed if you did step 2): Update the application manifest file
list<br /></strong>If you made any changes to any application files, you will need to refresh
the list of files contained in the application manifest. This is because the manifest
contains the hash for each file that provides a unique representation of the contents
of the file. If you changed the application file, the hash for that file that is in
the application manifest is no longer valid and needs to be updated.
</p>
        <p>
- Open the application manifest (.manifest file in the application files folder for
the version you are publishing) with mageui.exe. 
<br />
- Select the Files category in the list on the left side of the window.<br />
- Enter the path to the application files folder for the deployment on the right side. 
<br />
- You can press the ellipses (...) button to browse to the folder. 
</p>
        <p>
          <img alt="Mage Files Pane" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/mageui-files.gif" align="baseline" border="0" />
        </p>
        <p>
This step does not have to be done on the target machine because only relative paths
are stored in the manifest from the location of the manifest, but the manifest and
the application files need to be located with the same relative folder path as they
will be on the target machine (usually the same directory). 
<br />
- After you have entered the path to the folder, press the Populate button. 
<br />
-You will be prompted with a warning dialog about the fact that the files will be
renamed with a .deploy extension. 
<br />
- Click Yes in this dialog.
</p>
        <p>
          <img alt="Renaming Files Warning" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/renamefileswarning.gif" align="baseline" border="0" />
        </p>
        <p>
          <strong>Step 4: Sign the application manifest<br /></strong>If you make any changes to the application files and update the application
manifest as described in step 3, or if you just need to re-sign the application manifest
with a production certificate that is different than the one that was used in development,
then you will need to sign the manifest with Mage. To do so:<br />
- Open the .manifest file with mageui.exe if not already open from step 3. 
<br />
- Press the Save button in the toolbar, and you will be presented with the signing
dialog shown below.
</p>
        <p>
          <img alt="Signing Dialog" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/signingdialog.gif" align="baseline" border="0" />
        </p>
        <p>
- Provide the path to the certificate file and the certificate password at the top
of the dialog, or select the certificate from your personal certificate store at the
bottom of the dialog. 
<br />
- Click OK to sign the manifest with the selected certificate.
</p>
        <p>
          <strong>Step 5: Update the application manifest reference in the deployment manifest<br /></strong>If you performed step 4 and signed with a different certificate than the
one used to 
<br />
originally generate the deployment manifest, you now need to update the application
reference in the deployment manifest. The application reference is a strong reference
to the application manifest from the deployment manifest, including path information
as well as the public key token from the digital signature in the application manifest.
That signature is generated using the publisher certificate, so if you change the
certificate, you have to update the application reference. 
</p>
        <p>
To update the application reference, do the following:<br />
- Open the deployment manifest (.application file) in mageui.exe<br />
- Select Application Reference from the list of categories on the left of the window<br />
- Press the Select Manifest... button and navigate to the application manifest (.manifest
file) for the version that you are deploying.
</p>
        <p>
          <img alt="Application Reference UI" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/appref.gif" align="baseline" border="0" />
        </p>
        <p>
          <strong>Step 6: Update the Deployment Provider 
<br /></strong>If you are moving the application to a different server than the one where
you first published the application from Visual Studio, you will need to update the
deployment provider URL that is embedded in the deployment manifest. To do so, perform
the following steps:<br />
- Open the deployment manifest in mageui.exe if it is not already opened from step
5.<br />
- Select Deployment Options from the list of categories on the left side of the window.<br />
- Change the URL labeled Start Location to reflect the URL users will use to launch
the application from the client machine. This setting is saved as the deployment provider
in the deployment manifest.
</p>
        <p>
          <img alt="Deployment Provider" hspace="0" src="http://www.softinsight.com/bnoyes/content/binary/depoptions.gif" align="baseline" border="0" />
        </p>
        <p>
          <strong>Step 7: Sign the deployment manifest<br /></strong>- Click the Save button in the toolbar.<br />
- Enter the path and password for the publisher certificate file at the top of the
signing dialog, or select the certificate from the list of certificates at the bottom.
This should be the same certificate used to sign the application manifest.<br />
- Click OK to re-sign the manifest.
</p>
        <p>
At this point, your application should be ready to go from the client.<br /></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=bd37cddc-3574-49fc-b226-a7df516ecb43" />
      </body>
      <title>Manually Putting a ClickOnce Application into Production</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</guid>
      <link>http://briannoyes.net/2006/05/20/ManuallyPuttingAClickOnceApplicationIntoProduction.aspx</link>
      <pubDate>Sat, 20 May 2006 13:43:05 GMT</pubDate>
      <description>&lt;p&gt;
A common question with respect to ClickOnce is how to take an application that you
have published and tested on your local machine or a local development server and
move that application into production. The steps involved are not particularly complex,
but do involve using some other tools to get it done and are not easy to figure out
on your own unless you have a solid understanding of ClickOnce manifests, signing,
and how they relate to the launch mechanisms of ClickOnce.
&lt;/p&gt;
&lt;p&gt;
A key pre-requisite for doing this is that the administrator who will be placing the
application on the target machine will need to have the publisher certificate that
will be used to sign the production application available. Usually in large organizations
the developers will not have access to the company's real certificate to do their
development anyway, it will be up to the IT Administrator to get that certificate
and do the final signing of the applications anyway.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 1: Move your application files to the target machine.&lt;br&gt;
&lt;/strong&gt;Assuming you have published your application with Visual Studio to your local
machine or another test server in your development environment, the application files
are contained in the virtual directory or folder that you specified as the Publish
Location within Visual Studio. The deployment manifest, Bootstrapper setup.exe, publish.htm
deployment page, and version specific deployment manifests are located in the root
folder. For each version you published to that location, there is a subfolder that
contains the application manifest and application files for that version. You might
do this by zipping up the appropriate files and folders and just giving the zip file
to the administrator who will put it into production.
&lt;/p&gt;
&lt;p&gt;
To move the current version into production, you will need to copy the deployment
manifest, setup.exe, version-specific manifest and sub-folder for the version you
want to publish to the target machine deployment folder. You only need to include
the publish.htm file if you intend to use that test page directly to expose the application
to end users. But if you are going to put a link to the deployment manifest in some
other page or send a link via email, you don't need to include the publish.htm page.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 2 (Optional): Make needed changes to application files&lt;br&gt;
&lt;/strong&gt;If you need to change something in the application files, such as changing
a setting in the application configuration file or updating some graphics files, you
will need to update the application manifest after modifying the application files
themselves. So make the modifications needed in your application files.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 3: (Only needed if you did step 2): Update the application manifest file
list&lt;br&gt;
&lt;/strong&gt;If you made any changes to any application files, you will need to refresh
the list of files contained in the application manifest. This is because the manifest
contains the hash for each file that provides a unique representation of the contents
of the file. If you changed the application file, the hash for that file that is in
the application manifest is no longer valid and needs to be updated.
&lt;/p&gt;
&lt;p&gt;
- Open the application manifest (.manifest file in the application files folder for
the version you are publishing) with mageui.exe. 
&lt;br&gt;
- Select the Files category in the list on the left side of the window.&lt;br&gt;
- Enter the path to the application files folder for the deployment on the right side. 
&lt;br&gt;
- You can press the ellipses (...) button to browse to the folder. 
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Mage Files Pane" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/mageui-files.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
This step does not have to be done on the target machine because only relative paths
are stored in the manifest from the location of the manifest, but the manifest and
the application files need to be located with the same relative folder path as they
will be on the target machine (usually the same directory). 
&lt;br&gt;
- After you have entered the path to the folder, press the Populate button. 
&lt;br&gt;
-You will be prompted with a warning dialog about the fact that the files will be
renamed with a .deploy extension. 
&lt;br&gt;
- Click Yes in this dialog.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Renaming Files Warning" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/renamefileswarning.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 4: Sign the application manifest&lt;br&gt;
&lt;/strong&gt;If you make any changes to the application files and update the application
manifest as described in step 3, or if you just need to re-sign the application manifest
with a production certificate that is different than the one that was used in development,
then you will need to sign the manifest with Mage. To do so:&lt;br&gt;
- Open the .manifest file with mageui.exe if not already open from step 3. 
&lt;br&gt;
- Press the Save button in the toolbar, and you will be presented with the signing
dialog shown below.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Signing Dialog" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/signingdialog.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
- Provide the path to the certificate file and the certificate password at the top
of the dialog, or select the certificate from your personal certificate store at the
bottom of the dialog. 
&lt;br&gt;
- Click OK to sign the manifest with the selected certificate.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 5: Update the application manifest reference in the deployment manifest&lt;br&gt;
&lt;/strong&gt;If you performed step 4 and signed with a different certificate than the
one used to 
&lt;br&gt;
originally generate the deployment manifest, you now need to update the application
reference in the deployment manifest. The application reference is a strong reference
to the application manifest from the deployment manifest, including path information
as well as the public key token from the digital signature in the application manifest.
That signature is generated using the publisher certificate, so if you change the
certificate, you have to update the application reference. 
&lt;/p&gt;
&lt;p&gt;
To update the application reference, do the following:&lt;br&gt;
- Open the deployment manifest (.application file) in mageui.exe&lt;br&gt;
- Select Application Reference from the list of categories on the left of the window&lt;br&gt;
- Press the Select Manifest... button and navigate to the application manifest (.manifest
file) for the version that you are deploying.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Application Reference UI" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/appref.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 6: Update the Deployment Provider 
&lt;br&gt;
&lt;/strong&gt;If you are moving the application to a different server than the one where
you first published the application from Visual Studio, you will need to update the
deployment provider URL that is embedded in the deployment manifest. To do so, perform
the following steps:&lt;br&gt;
- Open the deployment manifest in mageui.exe if it is not already opened from step
5.&lt;br&gt;
- Select Deployment Options from the list of categories on the left side of the window.&lt;br&gt;
- Change the URL labeled Start Location to reflect the URL users will use to launch
the application from the client machine. This setting is saved as the deployment provider
in the deployment manifest.
&lt;/p&gt;
&lt;p&gt;
&lt;img alt="Deployment Provider" hspace=0 src="http://www.softinsight.com/bnoyes/content/binary/depoptions.gif" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Step 7: Sign the deployment manifest&lt;br&gt;
&lt;/strong&gt;- Click the Save button in the toolbar.&lt;br&gt;
- Enter the path and password for the publisher certificate file at the top of the
signing dialog, or select the certificate from the list of certificates at the bottom.
This should be the same certificate used to sign the application manifest.&lt;br&gt;
- Click OK to re-sign the manifest.
&lt;/p&gt;
&lt;p&gt;
At this point, your application should be ready to go from the client.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=bd37cddc-3574-49fc-b226-a7df516ecb43" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,bd37cddc-3574-49fc-b226-a7df516ecb43.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=3210b58c-0bec-42cf-ac73-7cc6e5c8a229</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=3210b58c-0bec-42cf-ac73-7cc6e5c8a229</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave four talks at the Software Developers Conference in Netherlands this week.
This is a very fun and interesting conference that is put on by a large user group
organization called Software Developers Network, run by Remi Caron and Joop Pecht.
</p>
        <p>
This conference is one of the most enjoyable conferences I get to do anywhere in the
world. It is amazing how professional and well run this conference is, especially
when you consider that it is being put on by a user group organization and it is better
run than many U.S. conferences put on by companies that are supposed to specialize
in this kind of event. All of the user group members that run the conference are volunteers,
and yet the quality and professionalism that comes out of that is outstanding.
</p>
        <p>
The attendees are hard core, ask great questions, and make the event fun for the speakers
as well. For those of you who attended and find your way to this post for the slides
and demos - thanks! 
</p>
        <p>
You can grab the slides and demos here:
</p>
        <p>
Build Smart Client Data Apps with Windows Forms 2.0:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildSmartClientDataApplicationswithWindowsForms2.0.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/SmartClientDataAppsDemos.zip">Demos</a><br />
Build Custom Data Bound Objects and Collections:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildCustomDataBoundBusinessObjectsandCollections.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/CustomBoundObjectsDemos.zip">Demos</a><br />
Present Rich Tabular Data with the DataGridView Control:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/PresentRichDataInterfaceswiththeDataGridViewControl.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/DataGRidViewDemos.zip">Demos</a><br />
Drive Application Behavior with Application and User Settings:  <a href="http://www.softinsight.com/downloads/Conferences/SDC06/DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/SDC06/ApplicationAndUserSettingsDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=3210b58c-0bec-42cf-ac73-7cc6e5c8a229" />
      </body>
      <title>Slides and Demos from SDC Netherlands</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</guid>
      <link>http://briannoyes.net/2006/05/20/SlidesAndDemosFromSDCNetherlands.aspx</link>
      <pubDate>Sat, 20 May 2006 13:35:03 GMT</pubDate>
      <description>&lt;p&gt;
I gave four talks at the Software Developers Conference in Netherlands this week.
This is a very fun and interesting conference that is put on by a large user group
organization called Software Developers Network, run by Remi Caron and Joop Pecht.
&lt;/p&gt;
&lt;p&gt;
This conference is one of the most enjoyable conferences I get to do anywhere in the
world. It is amazing how professional and well run this conference is, especially
when you consider that it is being put on by a user group organization and it is better
run than many U.S. conferences put on by companies that are supposed to specialize
in this kind of event. All of the user group members that run the conference are volunteers,
and yet the quality and professionalism that comes out of that is outstanding.
&lt;/p&gt;
&lt;p&gt;
The attendees are hard core, ask great questions, and make the event fun for the speakers
as well. For those of you who attended and find your way to this post for the slides
and demos - thanks! 
&lt;/p&gt;
&lt;p&gt;
You can grab the slides and demos here:
&lt;/p&gt;
&lt;p&gt;
Build Smart Client Data Apps with Windows Forms 2.0:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildSmartClientDataApplicationswithWindowsForms2.0.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/SmartClientDataAppsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Build Custom Data Bound Objects and Collections:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/BuildCustomDataBoundBusinessObjectsandCollections.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/CustomBoundObjectsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Present Rich Tabular Data with the DataGridView Control:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/PresentRichDataInterfaceswiththeDataGridViewControl.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/DataGRidViewDemos.zip"&gt;Demos&lt;/a&gt;
&lt;br&gt;
Drive Application Behavior with Application and User Settings:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/SDC06/ApplicationAndUserSettingsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=3210b58c-0bec-42cf-ac73-7cc6e5c8a229" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,3210b58c-0bec-42cf-ac73-7cc6e5c8a229.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=805946c3-ae07-49e2-8ae9-e85ac67ecfb5</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=805946c3-ae07-49e2-8ae9-e85ac67ecfb5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I spoke at DevTeach  in Montreal Tue-Thu of this week and had a great time as
always. If you haven't checked out this conference, you should plan on signing up
next year. Great location, great speakers, very well done conference with lots of
hard core sessions.
</p>
        <p>
If you attended one of my sessions and want to get the slides and demos, here you
go:
</p>
        <p>
NET371 - Drive App Behavior with Application and User Settings:  <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettings.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettingsDemos.zip">Demos</a></p>
        <p>
NET391 - Custom Bound Objects and Collections:  <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjects.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjectsDemos.zip">Demos</a></p>
        <p>
NET463 - Advanced ClickOnce:  <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnce.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnceDemos.zip">Demos</a></p>
        <p>
MusicLibrary Database Creation Script:   <a href="http://www.softinsight.com/downloads/Conferences/DevTeach/MusicLibrary.sql">Script</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=805946c3-ae07-49e2-8ae9-e85ac67ecfb5" />
      </body>
      <title>DevTeach Slides and Demos</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</guid>
      <link>http://briannoyes.net/2006/05/13/DevTeachSlidesAndDemos.aspx</link>
      <pubDate>Sat, 13 May 2006 17:09:02 GMT</pubDate>
      <description>&lt;p&gt;
I spoke at DevTeach&amp;nbsp; in Montreal Tue-Thu of this week and had a great time as
always. If you haven't checked out this conference, you should plan on signing up
next year. Great location, great speakers, very well done conference with lots of
hard core sessions.
&lt;/p&gt;
&lt;p&gt;
If you attended one of my sessions and want to get the slides and demos, here you
go:
&lt;/p&gt;
&lt;p&gt;
NET371 - Drive App Behavior with Application and User Settings:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettings.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET371_AppAndUserSettingsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
NET391 - Custom Bound Objects and Collections:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjects.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET391_CustomBoundObjectsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
NET463 - Advanced ClickOnce:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnce.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/NET463_AdvancedClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
MusicLibrary Database Creation Script:&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/Conferences/DevTeach/MusicLibrary.sql"&gt;Script&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=805946c3-ae07-49e2-8ae9-e85ac67ecfb5" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,805946c3-ae07-49e2-8ae9-e85ac67ecfb5.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=ae4fea41-e752-4016-a2bc-7ee79e0f9a01</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ae4fea41-e752-4016-a2bc-7ee79e0f9a01</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
People always ask me "How can you write a whole book on ClickOnce?" because they envision
the standard 5 minute demo of what ClickOnce is and does and think that is all there
is to it. The fact is there is just a plethora of variations, hidden behaviors, specialized
scenarios, and things people want to do with ClickOnce that are far more than 5 minute
answers. The book keeps growing the more I get into it.
</p>
        <p>
One of these things that snuck up and bit me recently (unfortunately in a live demo
at VS Connections) due to a gap in my knowledge was the way partial trust apps run
on the client machine.
</p>
        <p>
First some background on ClickOnce and application files. Any file you add to your
project and set the file Build Action property to Content will be added to the Application
Files (under the Publish tab in project properties) with a Publish Status of Include,
depending on the file type. MDF files (SQL Express), mdb, and XML files will get marked
as Data Files instead of Include. Include means the file will be deployed to the application
client cache folder under the user profile (C:\Documents and Settings\&lt;username&gt;\Local
Settings\Apps\&lt;obfuscated goo&gt;\), and Data File means it will be deployed to
a separate data folder associated with that app, also buried in the obfuscated goo
under the user profile. The data files are treated differently for updates (beyond
the scope of this post) and the folder is accessible through the ApplicationDeployment.DataDirectory
property.
</p>
        <p>
If you deploy an app with ClickOnce, and the app manifest requests Full Trust, then
when the app runs it simply gets launched by the runtime directly - the app executable
is the executable process that runs. It runs from the deployed client cache directory.
As a result, with a full trust app, you can access files that you deploy with your
app, marked with a Publish Status of Include, with a relative path such as ".\MyImage.jpg".
The current working directory when your executable starts is the folder it was launched
from, and so everything works out.
</p>
        <p>
Then you decide that you want to be more security concious, and switch your ClickOnce
security settings to only require partial trust (lets say LocalIntranet zone). Suddenly
your app stops working complaining that it can't find the file.
</p>
        <p>
So what's going on there??
</p>
        <p>
The problem is that the executable process is actually different when you run a ClickOnce
app under partial trust. When you configure a ClickOnce deployed app to request less
than full trust, the process that actually launches is AppLaunch.exe. This process
loads your executable assembly into an AppDomain which it has cranked down the CAS
security on to your requested permissions, and your app runs from that appdomain under
partial trust. This is similar to what Visual Studio 2005 does to enable partial trust
debugging with the &lt;appname&gt;.vshost.exe that is the debug process by default.
</p>
        <p>
So how does that screw up your paths? AppLaunch.exe is running from the .NET directory
under C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727\, and so the current working directory
for your app loaded into that host process is that folder. Naturally your application
files have not been deployed there, so your relative paths for locating the files
fail.
</p>
        <p>
OK, so next thought is "there's gotta be an API that I can call to say 'give me my
app's deployed directory'". Unfortunately, that thought would be incorrect.
</p>
        <p>
So what's the solution? Simple - don't ever deploy a file to the application directory
(Publish Status = Include) that you need to access explicitly through a path (i.e.
to load that file as a bitmap, xml file, etc.). If you need to do that, you should
mark it as a Data File, and access it by adding the file name to the ApplicationDeployment.DataDirectory
path. You can also use Application.UserAppDataPath property, results in the same thing
when you are ClickOnce deployed.
</p>
        <p>
Just wish I had known that before doing that demo on the fly in a way I had not done
it before in front of a live audience... :)
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ae4fea41-e752-4016-a2bc-7ee79e0f9a01" />
      </body>
      <title>Process Identity and Working Directory for Partial Trust ClickOnce Apps</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</guid>
      <link>http://briannoyes.net/2006/04/15/ProcessIdentityAndWorkingDirectoryForPartialTrustClickOnceApps.aspx</link>
      <pubDate>Sat, 15 Apr 2006 01:26:01 GMT</pubDate>
      <description>&lt;p&gt;
People always ask me "How can you write a whole book on ClickOnce?" because they envision
the standard 5 minute demo of what ClickOnce is and does and think that is all there
is to it. The fact is there is just a plethora of variations, hidden behaviors, specialized
scenarios, and things people want to do with ClickOnce that are far more than 5 minute
answers. The book keeps growing the more I get into it.
&lt;/p&gt;
&lt;p&gt;
One of these things that snuck up and bit me recently (unfortunately in a live demo
at VS Connections) due to a gap in my knowledge was the way partial trust apps run
on the client machine.
&lt;/p&gt;
&lt;p&gt;
First some background on ClickOnce and application files. Any file you add to your
project and set the file Build Action property to Content will be added to the Application
Files (under the Publish tab in project properties) with a Publish Status of Include,
depending on the file type. MDF files (SQL Express), mdb, and XML files will get marked
as Data Files instead of Include. Include means the file will be deployed to the application
client cache folder under the user profile (C:\Documents and Settings\&amp;lt;username&amp;gt;\Local
Settings\Apps\&amp;lt;obfuscated goo&amp;gt;\), and Data File means it will be deployed to
a separate data folder associated with that app, also buried in the obfuscated goo
under the user profile. The data files are treated differently for updates (beyond
the scope of this post) and the folder is accessible through the ApplicationDeployment.DataDirectory
property.
&lt;/p&gt;
&lt;p&gt;
If you deploy an app with ClickOnce, and the app manifest requests Full Trust, then
when the app runs it simply gets launched by the runtime directly - the app executable
is the executable process that runs. It runs from the deployed client cache directory.
As a result, with a full trust app, you can access files that you deploy with your
app, marked with a Publish Status of Include, with a relative path such as ".\MyImage.jpg".
The current working directory when your executable starts is the folder it was launched
from, and so everything works out.
&lt;/p&gt;
&lt;p&gt;
Then you decide that you want to be more security concious, and switch your ClickOnce
security settings to only require partial trust (lets say LocalIntranet zone). Suddenly
your app stops working complaining that it can't find the file.
&lt;/p&gt;
&lt;p&gt;
So what's going on there??
&lt;/p&gt;
&lt;p&gt;
The problem is that the executable process is actually different when you run a ClickOnce
app under partial trust. When you configure a ClickOnce deployed app to request less
than full trust, the process that actually launches is AppLaunch.exe. This process
loads your executable assembly into an AppDomain which it has cranked down the CAS
security on to your requested permissions, and your app runs from that appdomain under
partial trust. This is similar to what Visual Studio 2005 does to enable partial trust
debugging with the &amp;lt;appname&amp;gt;.vshost.exe that is the debug process by default.
&lt;/p&gt;
&lt;p&gt;
So how does that screw up your paths? AppLaunch.exe is running from the .NET directory
under C:\WINDOWS\Microsoft.Net\Framework\v2.0.50727\, and so the current working directory
for your app loaded into that host process is that folder. Naturally your application
files have not been deployed there, so your relative paths for locating the files
fail.
&lt;/p&gt;
&lt;p&gt;
OK, so next thought is "there's gotta be an API that I can call to say 'give me my
app's deployed directory'". Unfortunately, that thought would be incorrect.
&lt;/p&gt;
&lt;p&gt;
So what's the solution? Simple - don't ever deploy a file to the application directory
(Publish Status = Include) that you need to access explicitly through a path (i.e.
to load that file as a bitmap, xml file, etc.). If you need to do that, you should
mark it as a Data File, and access it by adding the file name to the ApplicationDeployment.DataDirectory
path. You can also use Application.UserAppDataPath property, results in the same thing
when you are ClickOnce deployed.
&lt;/p&gt;
&lt;p&gt;
Just wish I had known that before doing that demo on the fly in a way I had not done
it before in front of a live audience... :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=ae4fea41-e752-4016-a2bc-7ee79e0f9a01" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,ae4fea41-e752-4016-a2bc-7ee79e0f9a01.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=9a313063-56d6-417b-bb27-8c23404a10fa</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9a313063-56d6-417b-bb27-8c23404a10fa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I presented four sessions at DevConnections last week and have been a little remiss
on getting the slides and demos posted, but here they are:
</p>
        <p>
Secure ClickOnce Deployments:  <a href="http://www.softinsight.com/downloads/DevConnections/VSC302_SecureSmartClientClickOnceDeployments.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/DevConnections/VSC302-SecureClickOnceDemos.zip">Demos</a></p>
        <p>
Connecting Smart Clients with WCF: <a href="http://www.softinsight.com/downloads/DevConnections/VWF302_SmartClientConnectivitywithWCF.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/DevConnections/VFW302-ConnectingSmartClientsWCFDemos.zip">Demos</a></p>
        <p>
Drive Application Behavior with User and Application Settings:  <a href="http://www.softinsight.com/downloads/DevConnections/VAC301-DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf">Slides</a>   <a href="http://www.softinsight.com/downloads/DevConnections/VAC301-SettingsDemos.zip">Demos</a></p>
        <p>
Build a Data Access Layer with Enterprise Library Data Access Block:  <a href="http://www.softinsight.com/downloads/DevConnections/APP301-ImplementaDataAccessLayerwithEntLib.pdf">Slides</a>  <a href="http://www.softinsight.com/downloads/DevConnections/App301-DAABDemos.zip">Demos</a></p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=9a313063-56d6-417b-bb27-8c23404a10fa" />
      </body>
      <title>Slides and Demos from DevConnections Last Week</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</guid>
      <link>http://briannoyes.net/2006/04/11/SlidesAndDemosFromDevConnectionsLastWeek.aspx</link>
      <pubDate>Tue, 11 Apr 2006 14:26:41 GMT</pubDate>
      <description>&lt;p&gt;
I presented four sessions at DevConnections last week and have been a little remiss
on getting the slides and demos posted, but here they are:
&lt;/p&gt;
&lt;p&gt;
Secure ClickOnce Deployments:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VSC302_SecureSmartClientClickOnceDeployments.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VSC302-SecureClickOnceDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Connecting Smart Clients with WCF: &lt;a href="http://www.softinsight.com/downloads/DevConnections/VWF302_SmartClientConnectivitywithWCF.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VFW302-ConnectingSmartClientsWCFDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Drive Application Behavior with User and Application Settings:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VAC301-DriveApplicationBehaviorwithApplicationandUserConfigurationSettings.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/VAC301-SettingsDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Build a Data Access Layer with Enterprise Library Data Access Block:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/APP301-ImplementaDataAccessLayerwithEntLib.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/App301-DAABDemos.zip"&gt;Demos&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=9a313063-56d6-417b-bb27-8c23404a10fa" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,9a313063-56d6-417b-bb27-8c23404a10fa.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=23d11276-49e4-4c1b-ad6a-0507fdc64189</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=23d11276-49e4-4c1b-ad6a-0507fdc64189</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recorded a DNR and DNRtv last week in New London and they are already up on the
site.
</p>
        <p>
You can download/listen to the .NET Rocks! epsidode here: <a href="http://www.dotnetrocks.com">http://www.dotnetrocks.com</a></p>
        <p>
And the DNRtv here: <a href="http://www.dnrtv.com">http://www.dnrtv.com</a></p>
        <p>
In the DNR episode, we talk about data binding, ClickOnce and a few other related
topics.
</p>
        <p>
This DNRtv shows how to do some of the data binding stuff in the designer. Keep your
eyes out for another episode in a week or so on ClickOnce deployment.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=23d11276-49e4-4c1b-ad6a-0507fdc64189" />
      </body>
      <title>.NET Rocks and DNRtv episodes up</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</guid>
      <link>http://briannoyes.net/2006/02/24/NETRocksAndDNRtvEpisodesUp.aspx</link>
      <pubDate>Fri, 24 Feb 2006 14:45:20 GMT</pubDate>
      <description>&lt;p&gt;
I recorded a DNR and DNRtv last week in New London and they are already up on the
site.
&lt;/p&gt;
&lt;p&gt;
You can download/listen to the .NET Rocks! epsidode here: &lt;a href="http://www.dotnetrocks.com"&gt;http://www.dotnetrocks.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And the DNRtv here: &lt;a href="http://www.dnrtv.com"&gt;http://www.dnrtv.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In the DNR episode, we talk about data binding, ClickOnce and a few other related
topics.
&lt;/p&gt;
&lt;p&gt;
This DNRtv shows how to do some of the data binding stuff in the designer. Keep your
eyes out for another episode in a week or so on ClickOnce deployment.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=23d11276-49e4-4c1b-ad6a-0507fdc64189" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,23d11276-49e4-4c1b-ad6a-0507fdc64189.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=cceb1d90-9f88-49e9-bf30-39889ae025c5</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cceb1d90-9f88-49e9-bf30-39889ae025c5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I went up to New London this week and taped
two episodes of <a href="http://www.dnrtv.com/">DNRtv</a> and one <a href="http://www.dotnetrocks.com/">DNR </a>with <a href="http://weblogs.asp.net/cfranklin">Carl </a>and <a href="http://www.campbellassociates.ca/blog/">Richard</a>.
The DNRtv episodes should go up in the next two weeks, one on data binding and one
on ClickOnce deployment. The DNR will air on 22 March. Check them out!<img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=cceb1d90-9f88-49e9-bf30-39889ae025c5" /></body>
      <title>.NET Rocks! and .NET Rocks! TV Episodes coming up</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</guid>
      <link>http://briannoyes.net/2006/02/20/NETRocksAndNETRocksTVEpisodesComingUp.aspx</link>
      <pubDate>Mon, 20 Feb 2006 18:10:56 GMT</pubDate>
      <description>I went up to New London this week and taped two episodes of &lt;a href="http://www.dnrtv.com/"&gt;DNRtv&lt;/a&gt; and
one &lt;a href="http://www.dotnetrocks.com/"&gt;DNR &lt;/a&gt;with &lt;a href="http://weblogs.asp.net/cfranklin"&gt;Carl &lt;/a&gt;and &lt;a href="http://www.campbellassociates.ca/blog/"&gt;Richard&lt;/a&gt;.
The DNRtv episodes should go up in the next two weeks, one on data binding and one
on ClickOnce deployment. The DNR will air on 22 March. Check them out!&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=cceb1d90-9f88-49e9-bf30-39889ae025c5" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,cceb1d90-9f88-49e9-bf30-39889ae025c5.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=2d39e57c-831b-466a-a666-a0839f9eab70</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2d39e57c-831b-466a-a666-a0839f9eab70</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The question came up from several attendees at my MSDN Webcast on ClickOnce yesterday:
</p>
        <p>
"Can I launch a XXX application using ClickOnce?" (fill in XXX with VB6, MFC, etc.
- non-.NET applications)
</p>
        <p>
The answer is yes, you will just have to employ a little trick.
</p>
        <p>
What you need is a simple little launcher application that IS a Windows .NET application.
So do the following:
</p>
        <ol>
          <li>
Create a new Windows Application project with VS 2005. 
</li>
          <li>
Delete the Form1 from the project.</li>
          <li>
Add the unmanaged EXE and any supporting files to the VS 2005 project, which makes
them part of this application from a ClickOnce perspective. As a result, they will
get deployed with this application to its cache folder and can be executed by this
launcher app.</li>
          <li>
Edit the Program.cs file Main method and delete the current method body (which launches
the application and the form) and replace it with code to launch the unmanaged executable.
This just requires a single line of code: Process.Start("MyUnamangedApp.exe");</li>
        </ol>
        <p>
Note: You will need to give the launcher app full trust in the ClickOnce security
settings.
</p>
        <p>
Note2: If the unmanaged app relies on ActiveX or COM objects, those need to be added
to the project as well, and you will need to add a reference to the COM DLL's to the
project to get their reg-free COM information added to the manifest. See <a href="http://msdn.microsoft.com/vbasic/default.aspx?pull=/msdnmag/issues/05/04/RegFreeCOM/default.aspx">this
article </a>for more details.
</p>
        <p>
You can <a href="http://www.softinsight.com/downloads/COAppLauncher.zip">download
a sample implementation here</a>.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=2d39e57c-831b-466a-a666-a0839f9eab70" />
      </body>
      <title>Launching unmanaged applications with ClickOnce</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</guid>
      <link>http://briannoyes.net/2005/11/30/LaunchingUnmanagedApplicationsWithClickOnce.aspx</link>
      <pubDate>Wed, 30 Nov 2005 15:29:32 GMT</pubDate>
      <description>&lt;p&gt;
The question came up from several attendees at my MSDN Webcast on ClickOnce yesterday:
&lt;/p&gt;
&lt;p&gt;
"Can I launch a XXX application using ClickOnce?" (fill in XXX with VB6, MFC, etc.
- non-.NET applications)
&lt;/p&gt;
&lt;p&gt;
The answer is yes, you will just have to employ a little trick.
&lt;/p&gt;
&lt;p&gt;
What you need is a simple little launcher application that IS a Windows .NET application.
So do the following:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create a new Windows Application project with VS 2005. 
&lt;/li&gt;
&lt;li&gt;
Delete the Form1 from the project.&lt;/li&gt;
&lt;li&gt;
Add the unmanaged EXE and any supporting files to the VS 2005 project, which makes
them part of this application from a ClickOnce perspective. As a result, they will
get deployed with this application to its cache folder and can be executed by this
launcher app.&lt;/li&gt;
&lt;li&gt;
Edit the Program.cs file Main method and delete the current method body (which launches
the application and the form) and replace it with code to launch the unmanaged executable.
This just requires a single line of code: Process.Start("MyUnamangedApp.exe");&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Note: You will need to give the launcher app full trust in the ClickOnce security
settings.
&lt;/p&gt;
&lt;p&gt;
Note2: If the unmanaged app relies on ActiveX or COM objects, those need to be added
to the project as well, and you will need to add a reference to the COM DLL's to the
project to get their reg-free COM information added to the manifest. See &lt;a href="http://msdn.microsoft.com/vbasic/default.aspx?pull=/msdnmag/issues/05/04/RegFreeCOM/default.aspx"&gt;this
article &lt;/a&gt;for more details.
&lt;/p&gt;
&lt;p&gt;
You can &lt;a href="http://www.softinsight.com/downloads/COAppLauncher.zip"&gt;download
a sample implementation here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=2d39e57c-831b-466a-a666-a0839f9eab70" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,2d39e57c-831b-466a-a666-a0839f9eab70.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=9cc9ee60-f212-44d6-af33-dcf5279976fd</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9cc9ee60-f212-44d6-af33-dcf5279976fd</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those who attended or are interested, <a href="http://www.softinsight.com/downloads/MSDNWebcasts/ClickOnceDemos.zip">here
are the demos </a>from my MSDN Webcast on ClickOnce yesterday.
</p>
        <p>
You can find the webcast link for <a href="http://www.softinsight.com/bnoyes/ct.ashx?id=59ae0941-a088-4d69-8d9e-c48dab56bc2d&amp;url=http%3a%2f%2fwww.microsoft.com%2fevents%2fseries%2fmsdnlaunch2005.mspx%23Smart%2520Client">on-demand
viewing here</a>.
</p>
        <p>
For the demo that went awry demonstrating on-demand updates, the little mistake I
made was that I said that if you turn off automatic updates (Check for updates option
at top of Updates dialog), then you need to put in an Update location, which is true.
But what I was doing was fully qualifying the path to the deployment manifest, which
is incorrect. What you need to put is just the URL to the root folder where the deployment
manifest resides. VS will automatically append the deployment manifest file name.
So when I was putting in:
</p>
        <p>
          <a href="http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application">http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application</a>
        </p>
        <p>
I should have just been putting
</p>
        <p>
          <a href="http://localhost/ClickOnceOnDemand/">http://localhost/ClickOnceOnDemand/</a>
        </p>
        <p>
Another little tidbit I didn't mention is that you will need Full Trust for on-demand
updates, which is unfortunate because it means the app has to request full trust even
though it may not be doing anything privileged beyond on-demand updates.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=9cc9ee60-f212-44d6-af33-dcf5279976fd" />
      </body>
      <title>Demos from ClickOnce MSDN Webcast</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</guid>
      <link>http://briannoyes.net/2005/11/30/DemosFromClickOnceMSDNWebcast.aspx</link>
      <pubDate>Wed, 30 Nov 2005 14:31:21 GMT</pubDate>
      <description>&lt;p&gt;
For those who attended or are interested, &lt;a href="http://www.softinsight.com/downloads/MSDNWebcasts/ClickOnceDemos.zip"&gt;here
are the demos &lt;/a&gt;from my MSDN Webcast on ClickOnce yesterday.
&lt;/p&gt;
&lt;p&gt;
You can find the webcast link for &lt;a href="http://www.softinsight.com/bnoyes/ct.ashx?id=59ae0941-a088-4d69-8d9e-c48dab56bc2d&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fevents%2fseries%2fmsdnlaunch2005.mspx%23Smart%2520Client"&gt;on-demand
viewing here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
For the demo that went awry demonstrating on-demand updates, the little mistake I
made was that I said that if you turn off automatic updates (Check for updates option
at top of Updates dialog), then you need to put in an Update location, which is true.
But what I was doing was fully qualifying the path to the deployment manifest, which
is incorrect. What you need to put is just the URL to the root folder where the deployment
manifest resides. VS will automatically append the deployment manifest file name.
So when I was putting in:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application"&gt;http://localhost/ClickOnceOnDemand/ClickOnceOnDemand.application&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I should have just been putting
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://localhost/ClickOnceOnDemand/"&gt;http://localhost/ClickOnceOnDemand/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Another little tidbit I didn't mention is that you will need Full Trust for on-demand
updates, which is unfortunate because it means the app has to request full trust even
though it may not be doing anything privileged beyond on-demand updates.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=9cc9ee60-f212-44d6-af33-dcf5279976fd" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,9cc9ee60-f212-44d6-af33-dcf5279976fd.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=70eec0be-72c8-4287-9b2d-3f75adbe1a1f</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=70eec0be-72c8-4287-9b2d-3f75adbe1a1f</wfw:commentRss>
      <title>Secure ClickOnce Demployment Talk at DevConnections yesterday</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</guid>
      <link>http://briannoyes.net/2005/11/11/SecureClickOnceDemploymentTalkAtDevConnectionsYesterday.aspx</link>
      <pubDate>Fri, 11 Nov 2005 02:33:37 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;My
second session of the day yesterday at DevConnections was on ClickOnce deployments,
and specifically the various security protections and options that ClickOnce offers
for preventing unauthorized applications from being able to run through a ClickOnce
launch.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;You can grab the
slides and demos here:&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/SecureSmartClientClickOnceDeployments.pdf"&gt;Slides&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.softinsight.com/downloads/DevConnections/SecureClickOnceDemos.zip"&gt;Demos&lt;o:p&gt;&lt;/o:p&gt;
&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Some of the key
takeaways from this session were the following:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;ul type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ClickOnce provides a simple, powerful,
and easy to use mechanism for deploying smart client applications with minimal maintenance
effort and IT Admin involvement&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ClickOnce provides runtime security
protections through the Code Access Security (CAS) infrastructure of .NET to prevent
applications launched from ClickOnce from being granted permissions to perform any
operations or access any resources that the application was not specifically allowed
to do.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;ClickOnce app default permissions
are determined by the launch URL and how it maps to built-in CAS location-based code
groups (MyComputer, LocalIntranet, Internet, TrustedSites, UntrustedSites).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If the application manifest requests
permissions greater than those that would be granted based on the CAS location-based
code groups, permission elevation needs to occur. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;By default, permissions can be
elevated in one of two ways: user prompting or trusted publishers.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If an application is launched
through a link to a deployment manifest that is signed by a publisher certificate
that is not in the Trusted Publishers certificate store on the client machine, the
user will be prompted by default and can accept or reject the application. If they
accept it, the permissions for that application will be elevated to whatever permissions
the application manifest has requested.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;If an application is launched
that was signed with a publisher certificate that is in the client machine's Trusted
Publishers certificate store, then no user prompting will occur and the application
permissions will be automatically elevated to whatever the application manifest requests
because it is coming from a trusted source identified implicitly by IT admin when
they installed the publisher certificate in the Trusted Publishers store.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;If
you want to prevent the user from ever being prompted and only allow applications
from trusted publishers to be launched through ClickOnce (a good idea in an enterprise
environment), then you should create the registry key discussed in the slides from
the session and set the string values to Disabled for all the zones.&lt;/span&gt;&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=70eec0be-72c8-4287-9b2d-3f75adbe1a1f" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,70eec0be-72c8-4287-9b2d-3f75adbe1a1f.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=352749cf-f624-4103-9a0a-f9176b92b1d0</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=352749cf-f624-4103-9a0a-f9176b92b1d0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.dasblonde.net/PermaLink.aspx?guid=d27b43d3-bbcb-4611-96a0-89cdea5dee21">Great
post </a>by my colleague <a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3&amp;tabid=5#bustamante">Michele</a> from
IDesign following a discussion we had on ClickOnce permissions and what users are
allowed to do. Check it out!<img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=352749cf-f624-4103-9a0a-f9176b92b1d0" /></body>
      <title>ClickOnce user privilege requirements discussion</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</guid>
      <link>http://briannoyes.net/2005/11/09/ClickOnceUserPrivilegeRequirementsDiscussion.aspx</link>
      <pubDate>Wed, 09 Nov 2005 04:26:54 GMT</pubDate>
      <description>&lt;a href="http://www.dasblonde.net/PermaLink.aspx?guid=d27b43d3-bbcb-4611-96a0-89cdea5dee21"&gt;Great
post &lt;/a&gt;by my colleague &lt;a href="http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=3&amp;amp;tabid=5#bustamante"&gt;Michele&lt;/a&gt; from
IDesign following a discussion we had on ClickOnce permissions and what users are
allowed to do. Check it out!&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=352749cf-f624-4103-9a0a-f9176b92b1d0" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,352749cf-f624-4103-9a0a-f9176b92b1d0.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>DevConnections</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=69fc7632-be37-4dde-8290-6c9aa4e57fc4</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=69fc7632-be37-4dde-8290-6c9aa4e57fc4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll be speaking at <a href="http://www.vsconnections.com">Visual Studio Connections </a>(part
of <a href="http://www.devconnections.com">DevConnections</a>) in Las Vegas from 5-8
November. This is a great and growing conference that happens twice annually in the
US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged
to speak at for the last couple years. If you haven't been to one yet, you ought to
be hammering your boss for permisson/funding to attend for the following reasons:
</p>
        <ul>
          <li>
It will rapidly and time-effectively expose you to new solution technologies you might
not get a chance to explore on your own 
</li>
          <li>
You will get concentrated advanced training in current and future technologies, getting
you up to speed on them in far less time than you can achieve on your own 
</li>
          <li>
You will get presentations from the top speakers in the business 
</li>
          <li>
You will get a chance to network with peers in the industry, learn from others experiences
employing .NET technologies, which will make you more effective at employing them
yourself 
</li>
          <li>
You will have a lot of fun (OK, maybe don't tell your boss this...)</li>
        </ul>
        <p>
You can learn a lot peripherally from the conference too by reading the <a href="http://aspadvice.com/blogs/devconnections/default.aspx">DevConnections
blog here</a>. There are posts from other speakers as they develop their talks and
their own observations and experiences at the conference.
</p>
        <p>
I'll be presenting the following sessions:
</p>
        <p>
          <strong>VSM356: Build Custom Data Bound Business Objects and Collections</strong>
          <br />
          <strong>VSM351: Secure Smart Client ClickOnce Deployments</strong>
          <br />
          <strong>VID306: Build Event-Driven Applications with Indigo</strong>
          <br />
          <strong>VID309: Connect Smart Client Applications with Indigo</strong>
        </p>
        <p>
If you make it to the show (and you should!!), stop by and say hi!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=69fc7632-be37-4dde-8290-6c9aa4e57fc4" />
      </body>
      <title>Upcoming DevConnections Talks</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</guid>
      <link>http://briannoyes.net/2005/10/24/UpcomingDevConnectionsTalks.aspx</link>
      <pubDate>Mon, 24 Oct 2005 20:48:04 GMT</pubDate>
      <description>&lt;p&gt;
I'll be speaking at &lt;a href="http://www.vsconnections.com"&gt;Visual Studio Connections &lt;/a&gt;(part
of &lt;a href="http://www.devconnections.com"&gt;DevConnections&lt;/a&gt;) in Las Vegas from 5-8
November. This is a great and growing conference that happens twice annually in the
US, usually Orlando in the spring and Las Vegas in the fall, that I have been privileged
to speak at for the last couple years. If you haven't been to one yet, you ought to
be hammering your boss for permisson/funding to attend for the following reasons:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
It will rapidly and time-effectively expose you to new solution technologies you might
not get a chance to explore on your own 
&lt;li&gt;
You will get concentrated advanced training in current and future technologies, getting
you up to speed on them in far less time than you can achieve on your own 
&lt;li&gt;
You will get presentations from the top speakers in the business 
&lt;li&gt;
You will get a chance to network with peers in the industry, learn from others experiences
employing .NET technologies, which will make you more effective at employing them
yourself 
&lt;li&gt;
You will have a lot of fun (OK, maybe don't tell your boss this...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
You can learn a lot peripherally from the conference too by reading the &lt;a href="http://aspadvice.com/blogs/devconnections/default.aspx"&gt;DevConnections
blog here&lt;/a&gt;. There are posts from other speakers as they develop their talks and
their own observations and experiences at the conference.
&lt;/p&gt;
&lt;p&gt;
I'll be presenting the following sessions:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VSM356:&amp;nbsp;Build Custom Data Bound Business Objects and Collections&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VSM351:&amp;nbsp;Secure Smart Client ClickOnce Deployments&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VID306:&amp;nbsp;Build Event-Driven Applications with Indigo&lt;/strong&gt;
&lt;br&gt;
&lt;strong&gt;VID309:&amp;nbsp;Connect Smart Client Applications with Indigo&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
If you make it to the show (and you should!!), stop by and say hi!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=69fc7632-be37-4dde-8290-6c9aa4e57fc4" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,69fc7632-be37-4dde-8290-6c9aa4e57fc4.aspx</comments>
      <category>.NET</category>
      <category>Architecture</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>DevConnections</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=5652c644-212c-44f9-b640-ca7747c91e97</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,5652c644-212c-44f9-b640-ca7747c91e97.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,5652c644-212c-44f9-b640-ca7747c91e97.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5652c644-212c-44f9-b640-ca7747c91e97</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've got two MSDN Webcasts coming up at the end of November, both part of the "Best
Of" series that they are doing surrounding the launch of VS 2005 for those Webcasts
focused on .NET 2.0 and VS 2005 that got the highest scores in the last year.
</p>
        <p>
You can <a href="http://go.microsoft.com/?linkid=4078253">click through here </a>to
get to the webcasts:
</p>
        <p>
          <a href="http://go.microsoft.com/?linkid=4078253">
            <img alt="Click Through for Webcasts" hspace="0" src="C:\Documents and Settings\Brian Noyes\Desktop\msdnwebcast.jpg" align="baseline" border="0" />
          </a>
        </p>
        <p>
The two I am giving will both be on 29 November:
</p>
        <p>
Presenting Rich Rich Tabular Data with the DataGridView Control<br /><strong>Tuesday, November 29, 2005<br /></strong><i>10:00 A.M.–11:00 A.M. Pacific Time</i></p>
        <p>
Deploy Smart Client Applications with ClickOnce<br /><strong>Tuesday, November 29, 2005<br /></strong><i>1:00 P.M.–2:00 P.M. Pacific Time</i></p>
        <p>
          <em>Check them out!!</em>
        </p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5652c644-212c-44f9-b640-ca7747c91e97" />
      </body>
      <title>Two Upcoming MSDN Webcasts: Part of the "Best Of" Series</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,5652c644-212c-44f9-b640-ca7747c91e97.aspx</guid>
      <link>http://briannoyes.net/2005/10/24/TwoUpcomingMSDNWebcastsPartOfTheBestOfSeries.aspx</link>
      <pubDate>Mon, 24 Oct 2005 17:59:35 GMT</pubDate>
      <description>&lt;p&gt;
I've got two MSDN Webcasts coming up at the end of November, both part of the "Best
Of" series that they are doing surrounding the launch of VS 2005 for those Webcasts
focused on .NET 2.0 and VS 2005 that got the highest scores in the last year.
&lt;/p&gt;
&lt;p&gt;
You can &lt;a href="http://go.microsoft.com/?linkid=4078253"&gt;click through here &lt;/a&gt;to
get to the webcasts:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://go.microsoft.com/?linkid=4078253"&gt;&lt;img alt="Click Through for Webcasts" hspace=0 src="C:\Documents and Settings\Brian Noyes\Desktop\msdnwebcast.jpg" align=baseline border=0&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The two I am giving will both be on 29 November:
&lt;/p&gt;
&lt;p&gt;
Presenting Rich Rich Tabular Data with the DataGridView Control&lt;br&gt;
&lt;strong&gt;Tuesday, November 29, 2005&lt;br&gt;
&lt;/strong&gt;&lt;i&gt;10:00 A.M.–11:00 A.M.&amp;nbsp;Pacific Time&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
Deploy Smart Client Applications with ClickOnce&lt;br&gt;
&lt;strong&gt;Tuesday, November 29, 2005&lt;br&gt;
&lt;/strong&gt;&lt;i&gt;1:00 P.M.–2:00 P.M.&amp;nbsp;Pacific Time&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Check them out!!&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=5652c644-212c-44f9-b640-ca7747c91e97" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,5652c644-212c-44f9-b640-ca7747c91e97.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Data Binding</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=4932dd9f-638a-471f-9a3a-d058e278445d</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,4932dd9f-638a-471f-9a3a-d058e278445d.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,4932dd9f-638a-471f-9a3a-d058e278445d.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4932dd9f-638a-471f-9a3a-d058e278445d</wfw:commentRss>
      <title>On-Demand Updates with ClickOnce</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,4932dd9f-638a-471f-9a3a-d058e278445d.aspx</guid>
      <link>http://briannoyes.net/2005/09/29/OnDemandUpdatesWithClickOnce.aspx</link>
      <pubDate>Thu, 29 Sep 2005 21:49:06 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;ClickOnce supports both automatic
updating and on-demand updates. The default model checks for updates automatically
at application launch (when connected), and applies those updates immediately. There
are a number of options available for installed applications (available online and
offline), including whether to check automatically at all, whether to do it on a background
thread, whether to do it on a timed interval, and other options.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;However, sometimes you may want
to do updates on demand, either as the only update model, or in combination with automatic
updating in the background on a periodic interval. To do that, you will need to use
the ClickOnce API defined in the System.Deployment framework assembly.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The main class you will use to support
on-demand updates is the ApplicationDeployment class defined in the System.Deployment.Application.
You will typically add code in response to a user action (such as selecting a Check
For Updates menu item) that goes out and checks to see if updates are available, and
if so retrieves them. You will then need to restart the application to have those
changes applied. &lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;A simple but common pattern to accomplish
this is something like the following:&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;//
First check to see if we are running in a ClickOnce context&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;if&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; (&lt;/font&gt;&lt;span style="COLOR: teal"&gt;ApplicationDeployment&lt;/span&gt;&lt;font color=#000000&gt;.IsNetworkDeployed)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
Get an instance of the deployment&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;ApplicationDeployment&lt;/span&gt;&lt;font color=#000000&gt; deployment
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;ApplicationDeployment&lt;/span&gt;&lt;font color=#000000&gt;.CurrentDeployment;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
Check to see if updates are available&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (deployment.CheckForUpdate())&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;DialogResult&lt;/span&gt;&lt;font color=#000000&gt; res
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;MessageBox&lt;/span&gt;&lt;font color=#000000&gt;.Show(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;"A
new version of the &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;application
is available, do you want to update?"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;, &lt;span style="COLOR: maroon"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;"Application
Updater"&lt;/span&gt;&lt;font color=#000000&gt;, &lt;/font&gt;&lt;span style="COLOR: teal"&gt;MessageBoxButtons&lt;/span&gt;&lt;font color=#000000&gt;.YesNo);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (res
== &lt;/font&gt;&lt;span style="COLOR: teal"&gt;DialogResult&lt;/span&gt;&lt;font color=#000000&gt;.Yes)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
Do the update&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;deployment.Update();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;DialogResult&lt;/span&gt;&lt;font color=#000000&gt; res2
= &lt;/font&gt;&lt;span style="COLOR: teal"&gt;MessageBox&lt;/span&gt;&lt;font color=#000000&gt;.Show(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;"Update
complete, do you 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;want
to restart the application to apply the update?"&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;, 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;"Application
Updater"&lt;/span&gt;&lt;font color=#000000&gt;, &lt;/font&gt;&lt;span style="COLOR: teal"&gt;MessageBoxButtons&lt;/span&gt;&lt;font color=#000000&gt;.YesNo);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (res2
== &lt;/font&gt;&lt;span style="COLOR: teal"&gt;DialogResult&lt;/span&gt;&lt;font color=#000000&gt;.Yes)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
Restart the application to apply the update&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;Application&lt;/span&gt;&lt;font color=#000000&gt;.Restart();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;else&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;MessageBox&lt;/span&gt;&lt;font color=#000000&gt;.Show(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;"No
updates available."&lt;/span&gt;&lt;font color=#000000&gt;, &lt;/font&gt;&lt;span style="COLOR: maroon"&gt;"Application
Updater"&lt;/span&gt;&lt;font color=#000000&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;else&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: teal"&gt;MessageBox&lt;/span&gt;&lt;font color=#000000&gt;.Show(&lt;/font&gt;&lt;span style="COLOR: maroon"&gt;"Updates
not allowed unless you are launched through ClickOnce."&lt;/span&gt;&lt;font color=#000000&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Lucida Console'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;There are of course asynchronous
versions of the CheckForUpdate and Update methods if you want to avoid blocking your
UI while this happens.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;The project settings you will need
may not be completely apparent. The first important setting is that you need to change
the update behavior of the ClickOnce deployment to stop automatically checking for
updates if you are doing only on-demand updates. You do this through the Publish tab
of the project properties settings, Updates button, shown in Figure 1.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;img alt="Publish settings" hspace=0 src="D:\Brian Docs\Writing\SDN\ClickOnce On-Deman Updates\Figure 1.png" align=baseline border=0&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Figure 1: ClickOnce Update Behavior
Settings access&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;When you click that button, the
dialog in Figure 2 will show with default settings selected as shown.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;img alt="Update Settings defaults" hspace=0 src="D:\Brian Docs\Writing\SDN\ClickOnce On-Deman Updates\Figure 2.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Figure 2: ClickOnce Update Settings
Dialog&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;What you will want to do for a pure
on-demand updates application is to uncheck the box that says the application should
check for updates at the top. &lt;em&gt;&lt;strong&gt;The other trick that is not apparent but
required is that you have to specify an Update location at the bottom or you will
get an obscure error message when you try to launch the application on the client.&lt;/strong&gt;&lt;/em&gt; So
you should set up the update settings like shown in Figure 3.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;img alt="Modified update settings" hspace=0 src="D:\Brian Docs\Writing\SDN\ClickOnce On-Deman Updates\Figure 3.png" align=baseline border=0&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;Figure 3: ClickOnce On-Demand Update
Settings&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;With those settings in place, when
you publish your application out and the client launches it, they can invoke the code
shown earlier to check for and apply updates on-demand.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;If you wanted to combine on-demand
updates with periodic background checking for updates, you can do that by leaving
updates enabled, but you will need to select the option to check for updates after
the application starts. You will then want to configure the frequency of checking
using the options in the middle of the dialog.&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;b style="mso-bidi-font-weight: normal"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/b&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=4932dd9f-638a-471f-9a3a-d058e278445d" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,4932dd9f-638a-471f-9a3a-d058e278445d.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Languages and Tools</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=a95bee99-4298-4d49-8b04-367d2b6053ae</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,a95bee99-4298-4d49-8b04-367d2b6053ae.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,a95bee99-4298-4d49-8b04-367d2b6053ae.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a95bee99-4298-4d49-8b04-367d2b6053ae</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I gave a talk on ClickOnce in both St. Louis and Kansas City Monday and Tuesday evening
this week and had a really good time. After the St. Louis talk I was able to go out
for a beer with Bill Evjan, Scott Spradlin, and some of the other group members, which
is always a great chance to network while I am there. KC was more of a quick strike
since I had to fly out first thing in the morning to head to the MVP summit in Seattle.
</p>
        <p>
The code samples and slides can be <a href="http://www.softinsight.com/downloads/INETA/SmartClientDeploymentWithClickOnce_0905.zip">downloaded
here</a>.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a95bee99-4298-4d49-8b04-367d2b6053ae" />
      </body>
      <title>Smart Client Deployment with ClickOnce talks in St. Louis and KC</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,a95bee99-4298-4d49-8b04-367d2b6053ae.aspx</guid>
      <link>http://briannoyes.net/2005/09/29/SmartClientDeploymentWithClickOnceTalksInStLouisAndKC.aspx</link>
      <pubDate>Thu, 29 Sep 2005 21:42:26 GMT</pubDate>
      <description>&lt;p&gt;
I gave a talk on ClickOnce in both St. Louis and Kansas City Monday and Tuesday evening
this week and had a really good time. After the St. Louis talk I was able to go out
for a beer with Bill Evjan, Scott Spradlin, and some of the other group members, which
is always a great chance to network while I am there. KC was more of a quick strike
since I had to fly out first thing in the morning to head to the MVP summit in Seattle.
&lt;/p&gt;
&lt;p&gt;
The code samples and slides can be &lt;a href="http://www.softinsight.com/downloads/INETA/SmartClientDeploymentWithClickOnce_0905.zip"&gt;downloaded
here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a95bee99-4298-4d49-8b04-367d2b6053ae" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,a95bee99-4298-4d49-8b04-367d2b6053ae.aspx</comments>
      <category>.NET</category>
      <category>ClickOnce</category>
      <category>Community</category>
      <category>Languages and Tools</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://briannoyes.net/Trackback.aspx?guid=a2f8e6ef-3932-4bb1-921b-d56dab48f21e</trackback:ping>
      <pingback:server>http://briannoyes.net/pingback.aspx</pingback:server>
      <pingback:target>http://briannoyes.net/PermaLink,guid,a2f8e6ef-3932-4bb1-921b-d56dab48f21e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://briannoyes.net/CommentView,guid,a2f8e6ef-3932-4bb1-921b-d56dab48f21e.aspx</wfw:comment>
      <wfw:commentRss>http://briannoyes.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a2f8e6ef-3932-4bb1-921b-d56dab48f21e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Phew! After a year and a half of trying to keep pace with the changing betas and writing
the book on top of a full schedule of consulting, training, and speaking at conferences
and user groups, I am finally done. I submitted the final manuscript to production
on Friday. Now I just have to respond to any questions and reviews during the production
phase, convert the code samples to VB for download, and I can call this one a
wrap.
</p>
        <p>
You can order the book here (available January 2006):
</p>
        <p>
          <a href="http://www.amazon.com/exec/obidos/ASIN/032126892X/qid=1124482085/sr=11-1/ref=sr_11_1/102-1031358-5664119">http://www.amazon.com/exec/obidos/ASIN/032126892X/qid=1124482085/sr=11-1/ref=sr_11_1/102-1031358-5664119</a>
        </p>
        <p>
We will have a teaser chapter out at PDC that will also be available for download
as a PDF containing part of the chapter on the DataGridView control. I'll put up a
link to that as soon as it is available.
</p>
        <p>
Now I am start devoting my attention to my next book, Smart Client Deployment with
ClickOnce, also part of the Addison Wesley .NET Development series. I hope to knock
this one out in the next 6 months, so it should hit the shelves mid 2006.
</p>
        <img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a2f8e6ef-3932-4bb1-921b-d56dab48f21e" />
      </body>
      <title>Data Binding in Windows Forms 2.0 - Final Manuscript Done!</title>
      <guid isPermaLink="false">http://briannoyes.net/PermaLink,guid,a2f8e6ef-3932-4bb1-921b-d56dab48f21e.aspx</guid>
      <link>http://briannoyes.net/2005/08/30/DataBindingInWindowsForms20FinalManuscriptDone.aspx</link>
      <pubDate>Tue, 30 Aug 2005 16:50:53 GMT</pubDate>
      <description>&lt;p&gt;
Phew! After a year and a half of trying to keep pace with the changing betas and writing
the book on top of a full schedule of consulting, training, and speaking at conferences
and user groups, I am finally done. I submitted the final manuscript to production
on Friday. Now I just have to respond to any questions and reviews during the production
phase, convert the code samples to VB for download,&amp;nbsp;and I can call this one a
wrap.
&lt;/p&gt;
&lt;p&gt;
You can order the book here (available January 2006):
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/exec/obidos/ASIN/032126892X/qid=1124482085/sr=11-1/ref=sr_11_1/102-1031358-5664119"&gt;http://www.amazon.com/exec/obidos/ASIN/032126892X/qid=1124482085/sr=11-1/ref=sr_11_1/102-1031358-5664119&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
We will have a teaser chapter out at PDC that will also be available for download
as a PDF containing part of the chapter on the DataGridView control. I'll put up a
link to that as soon as it is available.
&lt;/p&gt;
&lt;p&gt;
Now I am start devoting my attention to my next book, Smart Client Deployment with
ClickOnce, also part of the Addison Wesley .NET Development series. I hope to knock
this one out in the next 6 months, so it should hit the shelves mid 2006.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://briannoyes.net/aggbug.ashx?id=a2f8e6ef-3932-4bb1-921b-d56dab48f21e" /&gt;</description>
      <comments>http://briannoyes.net/CommentView,guid,a2f8e6ef-3932-4bb1-921b-d56dab48f21e.aspx</comments>
      <category>.NET</category>
      <category>Languages and Tools</category>
      <category>Publishing</category>
      <category>Data Binding</category>
      <category>ClickOnce</category>
    </item>
  </channel>
</rss>