<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Beth Massi - Sharing the goodness that is VB : ClickOnce</title><link>http://blogs.msdn.com/bethmassi/archive/tags/ClickOnce/default.aspx</link><description>Tags: ClickOnce</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Channel 9 Interview: Re-signing ClickOnce Application and Deployment Manifests with MAGE</title><link>http://blogs.msdn.com/bethmassi/archive/2009/04/08/channel-9-interview-resigning-clickonce-application-and-deployment-manifests-with-mage.aspx</link><pubDate>Wed, 08 Apr 2009 18:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9538383</guid><dc:creator>Beth Massi</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/9538383.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=9538383</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=9538383</wfw:comment><description>&lt;P&gt;&lt;A href="http://channel9.msdn.com/posts/funkyonex/Resigning-ClickOnce-Application-and-Deployment-Manifests-with-MAGE/" target=_blank mce_href="http://channel9.msdn.com/posts/funkyonex/Resigning-ClickOnce-Application-and-Deployment-Manifests-with-MAGE/"&gt;I just posted another interview on Channel 9&lt;/A&gt;. I sit down again with Saurabh Bhatia, a Program Manager on the &lt;A href="http://blogs.msdn.com/vsto" mce_href="http://blogs.msdn.com/vsto"&gt;Office Client team&lt;/A&gt;, who is responsible for the ClickOnce publishing functionality in Visual Studio. We chat about trust issues and certificates and he sets me straight on how ClickOnce deployment and application manifests work. He then shows how to re-sign them outside of Visual Studio using a tool called &lt;A href="http://msdn.microsoft.com/en-us/library/acz3y3te.aspx" mce_href="http://msdn.microsoft.com/en-us/library/acz3y3te.aspx"&gt;Mage&lt;/A&gt;. This is really handy for folks that need to modify the files within a deployment package, like the application settings (app.config) file, but don't have Visual Studio installed. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://channel9.msdn.com/posts/funkyonex/Resigning-ClickOnce-Application-and-Deployment-Manifests-with-MAGE/" mce_href="http://channel9.msdn.com/posts/funkyonex/Resigning-ClickOnce-Application-and-Deployment-Manifests-with-MAGE/"&gt;&lt;STRONG&gt;Channel 9: Resigning ClickOnce Application and Deployment Manifests with MAGE&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Saurabh draws on the whiteboard in this one and since I'm a one (wo)man show I couldn't jump up and zoom in so I redrew it for you all here. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/photos/bethmassi/images/9537238/original.aspx" mce_href="http://blogs.msdn.com/photos/bethmassi/images/9537238/original.aspx"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" src="http://blogs.msdn.com/photos/bethmassi/images/9537238/500x177.aspx" border=0 mce_src="http://blogs.msdn.com/photos/bethmassi/images/9537238/500x177.aspx"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Saurabh has&amp;nbsp;also posted &lt;A href="http://blogs.msdn.com/vsto/archive/2009/04/29/signing-and-re-signing-manifests-in-clickonce.aspx" target=_blank&gt;more details in an article he wrote here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Links from the show:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://blogs.msdn.com/vsto/archive/2009/04/29/signing-and-re-signing-manifests-in-clickonce.aspx" target=_blank mce_href="http://blogs.msdn.com/vsto/archive/2009/04/29/signing-and-re-signing-manifests-in-clickonce.aspx"&gt;Signing and re-signing manifests in ClickOnce&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/acz3y3te.aspx" mce_href="http://msdn.microsoft.com/en-us/library/acz3y3te.aspx"&gt;Mage&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/vsto" mce_href="http://blogs.msdn.com/vsto"&gt;Office Client (VSTO) Team blog &lt;/A&gt;
&lt;LI&gt;&lt;A href="http://msdn.com/vsto" mce_href="http://msdn.com/vsto"&gt;VSTO Developer Center&lt;/A&gt; &lt;/A&gt;&lt;/LI&gt;&lt;/LI&gt;&lt;/UL&gt;Enjoy!&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9538383" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/ClickOnce/default.aspx">ClickOnce</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Channel9/default.aspx">Channel9</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title>What's New in Visual Studio 2008 SP1 - Client and Data Features</title><link>http://blogs.msdn.com/bethmassi/archive/2008/09/11/what-s-new-in-vs-2008-sp1-client-and-data-features.aspx</link><pubDate>Thu, 11 Sep 2008 22:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8945327</guid><dc:creator>Beth Massi</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/8945327.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=8945327</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=8945327</wfw:comment><description>&lt;P&gt;Last night I spoke at &lt;A href="http://www.baynetug.org/DesktopDefault.aspx?tabindex=1&amp;amp;tabid=26" target=_blank mce_href="http://www.baynetug.org/DesktopDefault.aspx?tabindex=1&amp;amp;tabid=26"&gt;East Bay.NET UG&lt;/A&gt; on some of the new features in &lt;A href="http://msdn.microsoft.com/en-us/vstudio/products/cc533448.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/vstudio/products/cc533448.aspx"&gt;Visual Studio Service Pack 1&lt;/A&gt; focusing on client and data. I did a whirlwind tour of &lt;A href="http://technet.microsoft.com/en-us/magazine/cc434692.aspx" target=_blank mce_href="http://technet.microsoft.com/en-us/magazine/cc434692.aspx"&gt;new SQL 2008 data types&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/bb726018.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/bb726018.aspx"&gt;Sync Services enhancements&lt;/A&gt;, &lt;A href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/bb399572.aspx"&gt;ADO.NET Entity Framework&lt;/A&gt;, &lt;A href="http://msdn.microsoft.com/en-us/library/cc907912.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc907912.aspx"&gt;ADO.NET Data Services&lt;/A&gt;, WPF &lt;A href="http://blogs.msdn.com/jgoldb/archive/2008/05/15/what-s-new-for-performance-in-wpf-in-net-3-5-sp1.aspx" target=_blank mce_href="http://blogs.msdn.com/jgoldb/archive/2008/05/15/what-s-new-for-performance-in-wpf-in-net-3-5-sp1.aspx"&gt;performance&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/system.windows.data.bindinglistcollectionview.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/system.windows.data.bindinglistcollectionview.aspx"&gt;data enhancements&lt;/A&gt;, &lt;A href="http://msdn.microsoft.com/en-us/library/cc656912.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc656912.aspx"&gt;Client Profile Deployment&lt;/A&gt;, VSTO Add-In &lt;A href="http://msdn.microsoft.com/en-us/library/x97a5x3s.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/x97a5x3s.aspx"&gt;Host Controls&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/ms178786.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms178786.aspx"&gt;Smart Tags&lt;/A&gt;, and VSTO &lt;A href="http://msdn.microsoft.com/en-us/library/3295w01c.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/3295w01c.aspx"&gt;deployment&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/cc442816.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc442816.aspx"&gt;end-user install troubleshooting&lt;/A&gt; improvements. There is just so much packed into SP1 that next month we'll be doing a talk on all things web including &lt;A href="http://msdn.microsoft.com/en-us/library/cc488546.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/cc488546.aspx"&gt;ASP.NET Dynamic Data&lt;/A&gt; and &lt;A href="http://www.asp.net/mvc/" target=_blank mce_href="http://www.asp.net/mvc/"&gt;MVC&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;The talk went really well and it was a lot of fun. I've uploaded the presentation and demos onto Code Gallery here: &lt;A title=http://code.msdn.microsoft.com/whatsnewvs2008sp1 href="http://code.msdn.microsoft.com/whatsnewvs2008sp1" mce_href="http://code.msdn.microsoft.com/whatsnewvs2008sp1"&gt;http://code.msdn.microsoft.com/whatsnewvs2008sp1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8945327" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Speaking/default.aspx">Speaking</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/ClickOnce/default.aspx">ClickOnce</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/DevCenter/default.aspx">DevCenter</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Office/default.aspx">Office</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Data/default.aspx">Data</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item><item><title>Deploying Interop UserControls with RegFree-COM</title><link>http://blogs.msdn.com/bethmassi/archive/2007/06/27/deploying-interop-usercontrols.aspx</link><pubDate>Thu, 28 Jun 2007 06:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3574462</guid><dc:creator>Beth Massi</dc:creator><slash:comments>19</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/3574462.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=3574462</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=3574462</wfw:comment><description>&lt;P&gt;One of the features of the latest &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit&lt;/A&gt; is the ability to develop UserControls in addition to Windows Forms. In a &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/06/13/interop-forms-toolkit-your-new-best-friend.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/06/13/interop-forms-toolkit-your-new-best-friend.aspx"&gt;previous post&lt;/A&gt;, I showed how to create a simple Interop UserControl. I also have a &lt;A class="" href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/2InteropUserControl.wmv" mce_href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/2InteropUserControl.wmv"&gt;video here on creating them&lt;/A&gt;, and &lt;A class="" href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/3HybridDeployment.wmv" mce_href="http://download.microsoft.com/download/d/6/4/d6400d90-d09e-4f23-bbb4-1b98da22da4f/3HybridDeployment.wmv"&gt;one here on deploying a hybrid application&lt;/A&gt; using the standard Setup and Deployment project in Visual Studio 2005. &lt;/P&gt;
&lt;P&gt;The benefit of creating Interop UserControl libraries is that you can deploy them using what's called &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/" target=_blank mce_href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/"&gt;RegFree-COM&lt;/A&gt;. This means that if you're deploying your VB6 applications on XP or higher OSs then you don't have to manually register the assemblies as COM components. Instead the operating system will "register" them for you on-the-fly at runtime. The COM component registry keys aren't physically created in the system's registry, keeping the system clean and allowing you to deploy COM components in a side-by-side fashion.&amp;nbsp;(On your development machine the UserControls are still physically registered when you build the assemblies so that you can develop in Visual Basic 6.) This may be the way to go if you have a current setup program that you use for your VB6 application that was written with the Setup and Deployment Wizard. &lt;/P&gt;
&lt;P&gt;Using RegFree-COM also means that you can take advantage of &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce Deployment&lt;/A&gt; (since ClickOnce will not&amp;nbsp;register COM components). The benefit of using ClickOnce deployment with your VB6 applications is that you can take advantage of a modern deployment architecture which includes automatic updates and deploying from a central web server. &lt;/P&gt;
&lt;P&gt;What the toolkit does to enable RegFree-COM is that it gets you started with a private assembly manifest for the UserControls. When you select the Interop User Control Library template when creating a new project in Visual Studio,&amp;nbsp;a InteropUserControl.manifest file is created for you along with the rest of the files. Inside this private assembly manifest is XML describing the controls inside your library. By default, the name of the UserControl that is created when you first create your library is InteropUserControl with a generated class id. This information is&amp;nbsp;described in the &amp;lt;clrClass&amp;gt; node.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3574232/original.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3574232/original.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;!-- You don't need to worry about anything in this file unless you're&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using registration-free COM.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There should be an appropriate &amp;lt;clrclass&amp;gt; section for every InteropUserControl&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; defined in the project --&amp;gt;&lt;BR&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" &lt;BR&gt;&amp;nbsp; manifestVersion="1.0"&amp;gt;&lt;BR&gt;&amp;lt;assemblyIdentity&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="win32"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="InteropUserControlLibrary1"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; version="1.0.0.0" /&amp;gt;&lt;BR&gt;&lt;STRONG&gt;&amp;lt;clrClass&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clsid="{7395b9d9-da47-4262-80e7-b4eed8768d09}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; progid="InteropUserControlLibrary1.InteropUserControl"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threadingModel="Both"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="InteropUserControlLibrary1.InteropUserControl" &amp;gt;&lt;BR&gt;&amp;lt;/clrClass&amp;gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;lt;/assembly&amp;gt; &lt;/P&gt;
&lt;P&gt;When you change the name of InteropUserControl or the assembly&amp;nbsp;name you need to also update the contents of this file as well. If you add more UserControls to your library you'll need to create a new &amp;lt;clrClass&amp;gt; node with that control's information. You can find the class ID by looking in the Interop UserControl's VB6 Interop Code Region and then in the COM Registration Region: 
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;ComClass(InteropUserControl.ClassId, InteropUserControl.InterfaceId, InteropUserControl.EventsId)&amp;gt; _&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; InteropUserControl&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;Region&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;"VB6 Interop Code"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;If&lt;/SPAN&gt; COM_INTEROP_ENABLED &lt;SPAN style="COLOR: blue"&gt;Then&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;Region&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a31515"&gt;"COM Registration"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;' These&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;GUIDs provide the COM identity for this class &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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;' and its COM interfaces. If you change them, existing &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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;' clients will no longer be able to access the class.&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Const&lt;/SPAN&gt; ClassId &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a31515"&gt;"&lt;SPAN style="BACKGROUND: yellow; mso-highlight: yellow"&gt;7395b9d9-da47-4262-80e7-b4eed8768d09&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Const&lt;/SPAN&gt; InterfaceId &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a31515"&gt;"739b2e94-6bdf-4417-beff-25a457e6df8f"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Const&lt;/SPAN&gt; EventsId &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;String&lt;/SPAN&gt; = &lt;SPAN style="COLOR: #a31515"&gt;"65029223-ea4e-4cb0-9462-27edbbf985fa"&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;'These routines perform the additional COM registration needed by ActiveX controls&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ComRegisterFunction()&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Shared&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Register(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; t &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; Type)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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; &lt;/SPAN&gt;ComRegistration.RegisterControl(t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ComUnregisterFunction()&amp;gt; _&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Shared&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Unregister(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; t &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; Type)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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; &lt;/SPAN&gt;ComRegistration.UnregisterControl(t)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;#&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Region&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;As an example, I created an Interop UserControl library&amp;nbsp;called ARegFreeComLibrary. In this library I created two UserControls, one called CustomerDetails and one called OrderDetails so my manifest looks like this: &lt;/P&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;!-- You don't need to worry about anything in this file unless you're&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using registration-free COM.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; There should be an appropriate &amp;lt;clrclass&amp;gt; section for every InteropUserControl&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; defined in the project --&amp;gt;&lt;BR&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" &lt;BR&gt;&amp;nbsp; manifestVersion="1.0"&amp;gt;&lt;BR&gt;&amp;lt;assemblyIdentity&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="win32"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ARegFreeComLibrary"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; version="1.0.0.0" /&amp;gt;&lt;BR&gt;&amp;lt;clrClass&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clsid="{7395b9d9-da47-4262-80e7-b4eed8768d09}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; progid="ARegFreeComLibrary.CustomerDetails"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threadingModel="Both"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ARegFreeComLibrary.CustomerDetails" &amp;gt;&lt;BR&gt;&amp;lt;/clrClass&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;clrClass&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clsid="{bb58ec27-8668-49e0-90cf-3542075654a9}"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; progid="ARegFreeComLibrary.OrderDetails"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; threadingModel="Both"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ARegFreeComLibrary.OrderDetails" &amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/clrClass&amp;gt;&lt;BR&gt;&amp;lt;/assembly&amp;gt;&lt;/P&gt;
&lt;P&gt;The other manifest file you need to have for RegFree-COM to work is called a client manifest file and this needs to be manually created and then placed in the application's directory. This would be where your VB6 application is also deployed. The contents of this manifest include the name and version of the VB6 application and then the Interop UserControl assembly information:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;BR&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblyIdentity type="win32" name="MyVB6App" version="1.0.0.0" processorArchitecture="x86" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependentAssembly&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblyIdentity type="win32" name="ARegFreeComLibrary" version="1.0.0.0" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependentAssembly&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;BR&gt;&amp;lt;/assembly&amp;gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Place this into a file named after your VB6 application with an extension of .manifest, in my case, MyVB6App.exe.manifest, and pop it into the same folder as the exe. &lt;STRONG&gt;It's important that you name the client&amp;nbsp;manifest file&amp;nbsp;the same&amp;nbsp;as your VB6 application + exe.manifest extension otherwise RegFree-COM will not work.&lt;/STRONG&gt; To manage the file easier, from the Project menu in Visual Studio I selected Add New Item and selected Text File to create the manifest. In the properties window&amp;nbsp;I then set the "Build Action" to Content and "Copy to Output Directory" to Copy Always. I find it easier to keep track of it this way.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3593173/199x375.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3593173/199x375.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Next thing to do is copy your VB6 app into the release folder under \bin\Release\ and any supporting files. In my example I am using an Access mdb, but I've added this file to the library I created as a local data file so it'll get built into the Release folder as well. Note, when working with local data files you'll need to also set the Copy to Output Directory &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/05/29/working-with-a-local-data-file-in-vs.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/05/29/working-with-a-local-data-file-in-vs.aspx"&gt;appropriately like I explain in this post&lt;/A&gt;. Now what the client is going to need in order to run all this is:&lt;/P&gt;
&lt;P mce_keep="true"&gt;1) The .NET Framework 2.0&lt;BR&gt;2) The VB runtime (comes with XP and up&amp;nbsp;OS's) and any OCX's or other referenced components/data you use in your VB6 application&lt;BR&gt;4) Your Interop UserControl assembly and&amp;nbsp;any .config files and the client .exe.manifest &lt;BR&gt;3) The Microsoft.InteropFormTools assembly &lt;/P&gt;
&lt;P mce_keep="true"&gt;When creating Interop UserControls you can remove the reference to the Microsoft.InteropFormTools assembly if you aren't using it -- just remove the reference and then comment out the code&amp;nbsp;at the top of the ActiveXControlHelpers.vb file. However, if you are using it&amp;nbsp;then it's easy to get ClickOnce to install this as a prerequisite (just like the Framework 2.0) because the toolkit now comes with a redistributable package. (You'll see this in a minute.)&lt;/P&gt;
&lt;P mce_keep="true"&gt;You can also add your VB6 application to the project which, in my example,&amp;nbsp;includes the MyVB6App.exe and the Msdatgrd.ocx (the VB6 DataGrid I'm using). Adding them&amp;nbsp;as content files and marking them to always copy to output directory will put them into the \bin\Release folder every time you build the UserControl project. You can also specify the&amp;nbsp;class library&amp;nbsp;project location when&amp;nbsp;you make&amp;nbsp;your VB6&amp;nbsp;EXE,&amp;nbsp;that way all the files&amp;nbsp;you need to deploy come out in one place, the \bin\Release. If you're deploying this to a machine that already has the VB6 Runtime and the .NET 2.0 Framework then you can just xcopy deploy the&amp;nbsp;Release&amp;nbsp;to the client&amp;nbsp;machine and run. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Using ClickOnce Deployment is optional but for this example we'll set it up this way. Since you can't use ClickOnce to deploy a&amp;nbsp;class library&amp;nbsp;project, instead of adding the VB6 application files to the&amp;nbsp;class library&amp;nbsp;project, we'll add them to a new Windows Forms application instead.&amp;nbsp;So I just added a simple Windows Application to my solution called InteropAppLauncher. Once you have this project created you can then add a reference to your Interop UserControl Assembly and select "Add Existing Item" on the VB6 application files as well as the client manifest file (MyVB6App.exe.manifest). In my case, since I'm using an Access.mdb file I moved this file into the launcher application as well so it can be deployed.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3593153/216x480.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3593153/216x480.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Next thing to do is to write a couple lines of code in the launcher's form so that it will launch your VB6 application right away and close.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;/SPAN&gt; Form1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&lt;/SPAN&gt; Form1_Load(&lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; sender &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; System.Object, &lt;SPAN style="COLOR: blue"&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN style="COLOR: blue"&gt;As&lt;/SPAN&gt; System.EventArgs) &lt;SPAN style="COLOR: blue"&gt;Handles&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;MyBase&lt;/SPAN&gt;.Load&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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; &lt;/SPAN&gt;Process.Start(&lt;SPAN style="COLOR: #a31515"&gt;"MyVB6App.exe"&lt;/SPAN&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; 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; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;Me&lt;/SPAN&gt;.Close()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Sub&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; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;End&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;Class&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Now we're ready to publish with ClickOnce. Select My Project and go to the Publish Tab and enter the deployment location. I just set up a local file share, but you can easily publish to a web server as well. Select the Prerequisites button and you'll see the redistributable packages available. You'll definitely need .NET Framework 2.0 but you can decide whether you need the Interop Forms Toolkit 2.0 package depending on if you left the reference to Microsoft.InteropFormTools assembly. If you did, then you'll need to include this package.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.msdn.com/photos/bethmassi/images/3591374/483x375.aspx" mce_src="http://blogs.msdn.com/photos/bethmassi/images/3591374/483x375.aspx"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Once you've set all that up you can click the Publish Now button or select Publish from the build menu. Now you have a ClickOnce setup that will launch your VB6 application which uses RegFree-COM in order to create a friction free deployment for your Interop User Controls. &lt;A class="" href="http://blogs.msdn.com/bethmassi/attachment/3574462.ashx" mce_href="http://blogs.msdn.com/bethmassi/attachment/3574462.ashx"&gt;I've included the&amp;nbsp;sample&amp;nbsp;I built for your reference&lt;/A&gt;. To try out RegFree-COM, just compile&amp;nbsp;the solution&amp;nbsp;and then run the InteropAppLauncher.exe in the \ARegFreeComLibrary\InteropAppLauncher\bin\Release\ folder. For more info on setting up ClickOnce to deploy Visual Basic 6 applications, &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa697430(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/aa697430(VS.80).aspx"&gt;check out Scott's article on MSDN&lt;/A&gt;&amp;nbsp;and this &lt;A class="" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032333404&amp;amp;EventCategory=3&amp;amp;culture=en-US&amp;amp;CountryCode=US" target=_blank mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032333404&amp;amp;EventCategory=3&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;LabCast to try it out yourself right now&lt;/A&gt;. By the way, you can &lt;A class="" href="http://www.vfpconversion.com/Article.aspx?quickid=0703072" target=_blank mce_href="http://www.vfpconversion.com/Article.aspx?quickid=0703072"&gt;use ClickOnce for deploying Visual FoxPro applications&lt;/A&gt; as well.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Anyone developing Visual Basic 6 (or Visual FoxPro) applications should consider taking advantage of the &lt;A class="" href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/vbasic/bb419144.aspx"&gt;Interop Forms Toolkit 2.0&lt;/A&gt;, &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce Deployment&lt;/A&gt;, and &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/" target=_blank mce_href="http://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/"&gt;RegFree-COM&lt;/A&gt; to bring .NET's modern&amp;nbsp;capabilities to your users in an easy-to-manage way. &lt;/P&gt;
&lt;P mce_keep="true"&gt;In the next interop post I'll talk about setting up debugging across Visual Studio and VB6. (UPDATE: &lt;A class="" href="http://blogs.msdn.com/bethmassi/archive/2007/07/03/debugging-hybrid-vb6-net-applications.aspx" target=_blank mce_href="http://blogs.msdn.com/bethmassi/archive/2007/07/03/debugging-hybrid-vb6-net-applications.aspx"&gt;Here's how to debug&lt;/A&gt;.)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3574462" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/bethmassi/attachment/3574462.ashx" length="803076" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VS2005/default.aspx">VS2005</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/ClickOnce/default.aspx">ClickOnce</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/VB6/default.aspx">VB6</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Interop+Toolkit/default.aspx">Interop Toolkit</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Article/default.aspx">Article</category></item><item><title>Microsoft ClickOnce Case Study</title><link>http://blogs.msdn.com/bethmassi/archive/2007/04/17/microsoft-clickonce-case-study.aspx</link><pubDate>Tue, 17 Apr 2007 15:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2166254</guid><dc:creator>Beth Massi</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/bethmassi/comments/2166254.aspx</comments><wfw:commentRss>http://blogs.msdn.com/bethmassi/commentrss.aspx?PostID=2166254</wfw:commentRss><wfw:comment>http://blogs.msdn.com/bethmassi/rsscomments.aspx?PostID=2166254</wfw:comment><description>&lt;P&gt;This week will be my fourth week at Microsoft and everyday I find a cool tool, website, or business application on the corporate intranet. It's exciting to navigate the company ocean and find really cool business applications.&amp;nbsp;Others at Microsoft probably take them for granted, but I guess being&amp;nbsp;a former architect of these types of applications makes them interesting to me :-). Everything you need to do is online either in the form of a web application or a smart-client. &lt;/P&gt;
&lt;P&gt;One of the cooler smart-client apps is our HR application called HeadTrax. It uses ClickOnce to deploy a Windows Forms application to your machine and connect to the HR databases over the web. Last week they released a &lt;A class="" href="http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=201295" target=_blank mce_href="http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=201295"&gt;case study on ClickOnce and HeadTrax&lt;/A&gt; which was very cool. And of course one of the many technologies listed was Visual Basic 2005 :-). For more information on ClickOnce visit the &lt;A class="" href="http://msdn2.microsoft.com/en-us/netframework/aa497348.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/netframework/aa497348.aspx"&gt;ClickOnce website on MSDN&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2166254" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/bethmassi/archive/tags/Visual+Basic/default.aspx">Visual Basic</category><category domain="http://blogs.msdn.com/bethmassi/archive/tags/ClickOnce/default.aspx">ClickOnce</category></item></channel></rss>