<?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>Ryan's Look at Outlook Programmability : .NET</title><link>http://blogs.msdn.com/rgregg/archive/tags/.NET/default.aspx</link><description>Tags: .NET</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Application Shutdown Changes in Outlook 2007 Service Pack 2 Beta</title><link>http://blogs.msdn.com/rgregg/archive/2008/10/27/application-shutdown-changes-in-outlook-2007-service-pack-2-beta.aspx</link><pubDate>Mon, 27 Oct 2008 22:17:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9018839</guid><dc:creator>rgregg</dc:creator><slash:comments>21</slash:comments><comments>http://blogs.msdn.com/rgregg/comments/9018839.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rgregg/commentrss.aspx?PostID=9018839</wfw:commentRss><wfw:comment>http://blogs.msdn.com/rgregg/rsscomments.aspx?PostID=9018839</wfw:comment><description>&lt;p&gt;As part of the performance improvements we’ve made for Outlook 2007 SP2 beta, we’ve changed the way Outlook manages the lifecycle of the application. In the past, Outlook followed the best practices for Component Object Model (COM) servers and allowed clients of the Outlook server to control the lifecycle of Outlook. This caused a significant end-user side effect: often the user could not close Outlook because of lingering external references. This is confusing and frustrating for our users, and many users would often use Task Manager to terminate the Outlook process.&lt;/p&gt;  &lt;p&gt;As a result of strong and long-standing customer feedback about the need to close Outlook and have Outlook stop running, Service Pack 2 changes the way Outlook closes, ensuring that the user’s intent to close Outlook is respected. These changes mean the way the Outlook COM server shuts down has changed significantly, which may impact solutions using the Outlook object model outside of the Outlook process.&lt;/p&gt;  &lt;h4&gt;Impact for Add-ins: None&lt;/h4&gt;  &lt;p&gt;&lt;b&gt;If you’ve written an in-process add-in for Outlook this change does not affect you.&lt;/b&gt; The lifecycle of in-process add-ins and in-process COM references in Outlook 2007 has always been the same as the lifecycle of the application. When the user closes the last Outlook window and Outlook starts to shut down, add-ins are disconnected and references are released.&lt;/p&gt;  &lt;p&gt;Add-ins can use the Quit event on the Application object to determine when Outlook will be closing down. After the Quit event is raised, add-ins will have their OnDisconnection method called, and then the add-in and Outlook will close.&lt;/p&gt;  &lt;h4&gt;Impact for Cross Process Solutions&lt;/h4&gt;  &lt;p&gt;Before Outlook 2007 SP2, Outlook would check for external (out of process) references on the COM Server objects and wait for those references to be released before Outlook would close. This would enable solutions that were depending on Outlook data to keep Outlook running until the references were released. This is common behavior for COM servers, but is unexpected behavior for end users, who expect that an application will close when they close the last window of the application (or at least reasonably soon after they close the last window).&lt;/p&gt;  &lt;p&gt;Starting with Outlook 2007 Service Pack 2, Outlook will ignore external COM references when determining if Outlook should exit. When a user closes the last Outlook window, Outlook will start exiting the process: this involves raising the Quit event on the Application object, disconnect all add-ins, disconnecting external references, persisting in-memory changes to the disk, and then exiting. All external COM references will be disconnected immediately after the Quit event is raised on the Application object.&lt;/p&gt;  &lt;p&gt;Because of the way COM works, when Outlook releases the external references, those objects become disconnected objects in cross process solutions. When a solution attempts to use the disconnected reference, an error will result from any call to the object (RPC_E_DISCONNECTED). Solutions that are not designed to handle this error may crash or otherwise misbehave. This will occur any time a solution attempts to use an object reference after Outlook has closed.&lt;/p&gt;  &lt;p&gt;To work correctly with the new behavior in Outlook, your solution should listen for the Quit event on the Application object. When that event is raised, stop any work in progress using Outlook data, and release all Outlook references. Any remaining references after the solution returns from the Quit event will be disconnected. &lt;/p&gt;  &lt;p&gt;While handling the Quit event, a solution should return from the event as quickly as possible. While a solution is working in the Quit event, Outlook may appear hung to the user and the operating system and the user may forcibly terminate Outlook instead of waiting for it to finish closing. &lt;/p&gt;  &lt;p&gt;If your solution needs to access data from Outlook after the process has shutdown, it can do so by starting the process up again in UI-less mode by calling CoCreateInstance(). However, you should attempt to design your solution such that data from Outlook is only collected while Outlook is running. I’ll be blogging about an example of how to design a solution that works this way in an upcoming blog post.&lt;/p&gt;  &lt;h4&gt;Special Cases&lt;/h4&gt;  &lt;p&gt;While the text above describes the default, we realize that there are customers and solutions which will be negatively impacted by this change until the solution can be updated. To restore the old behavior, administrators can set a registry key to force Outlook to wait for all external references to be released before closing.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;This registry key applies to Outlook 2007 SP2 beta, the registry key may change for the final release of SP2.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Options\Shutdown]    &lt;br /&gt;“AllowShutdownWithExternalReferences”=dword:00000000&lt;/p&gt;  &lt;p&gt;We’ve also done work to ensure that when a solution uses CoCreateInstance and Outlook isn’t running, the right things happen. In those cases, Outlook will remain running in “headless mode” without any visible user interface. If the user launches Outlook, a new Outlook window will appear in the same session Outlook was already using. If the user closes that window, even though the process was started by a solution, Outlook will exit in the same manner as it would if the application was started by the user.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;As part of a larger overall performance improvement effort in Outlook 2007 Service Pack 2, the team has invested a significant amount of time to improve the experience around closing Outlook. We’ve also made changes to ensure that Outlook boots faster and is more responsive all around. &lt;/p&gt;  &lt;p&gt;I’m interested in your feedback on this new shutdown logic, and any thoughts or questions about how we can continue to improve this experience in the next Outlook release. Please leave a comment on this post and let me know what you have to say.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9018839" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rgregg/archive/tags/Object+Model/default.aspx">Object Model</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Common+Problems/default.aspx">Common Problems</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/events/default.aspx">events</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/troubleshooting/default.aspx">troubleshooting</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/performance/default.aspx">performance</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/shutdown/default.aspx">shutdown</category></item><item><title>Common Properties on Outlook Controls</title><link>http://blogs.msdn.com/rgregg/archive/2007/10/01/common-properties-on-outlook-controls.aspx</link><pubDate>Tue, 02 Oct 2007 03:12:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5231879</guid><dc:creator>rgregg</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rgregg/comments/5231879.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rgregg/commentrss.aspx?PostID=5231879</wfw:commentRss><wfw:comment>http://blogs.msdn.com/rgregg/rsscomments.aspx?PostID=5231879</wfw:comment><description>&lt;p&gt;If you’ve started to take advantage of the new Outlook controls on form regions in Outlook 2007, you may have noticed something strange. None of the controls have common properties you would expect all controls to have: Visible, Width, Height, Top, Left, etc. You might be thinking we missed some obvious test case here, but you’d be wrong.  &lt;p&gt;These properties do in fact exist on the controls. However, because of a complexity of COM and Office dependencies, the properties do not show up in the type library exposed by Outlook.  &lt;p&gt;Each of the Outlook controls (they all start with Olk in the type library) also implement the Control interface from fm20.dll. This interface includes all common properties, including Height, Width, Top, Left, Name, Parent, TabIndex, TabStop, Visible and more.  &lt;p&gt;If you are using a language that supports late binding for COM objects, you can just reference the property directly and everything will work as expected.  &lt;p&gt;If you’re writing managed code, or other code which requires explicit definitions of the properties, you will need to cast the control object to the Control interface from fm20.dll to read or write these properties. For example, if you’re writing in C#, you would need to do something like the following:  &lt;p&gt;&lt;font face="Conso" size="2"&gt;using Outlook = Microsoft.Office.Interop.Outlook;&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;using MSForms = Microsoft.Vbe.Interop.Forms;&lt;/font&gt;  &lt;p&gt;&lt;font face="Conso" size="2"&gt;public void BeforeFormRegionShow(Outlook.FormRegion FormRegion)&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;{&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Find OlkButton1 and make it invisible&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSForms.UserForm canvas = FormRegion.Form as MSForms.UserForm;&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Outlook.OlkCommandButton button1 = &lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvas.Controls.Item("OlkButton1") as Outlook.OlkCommandButton;&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //button1.Visible = false; // can't do this, it doesn't compile&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSForms.Control ctrlButton1 = (MSForms.Control)button1;&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctrlButton1.Visible = false; // this works!&lt;br&gt;&lt;/font&gt;&lt;font face="Conso" size="2"&gt;}&lt;/font&gt;  &lt;p&gt;We tried to find a way to combine these two interfaces together, but because Outlook doesn’t have a dependency on the Microsoft Forms library, it wasn’t feasible to make it work right. There is at least a work-around for developers who need to access these properties.  &lt;p&gt;You can also access additional Outlook-specific properties on controls by casting the control to the OlkControl interface in Outlook. This interface provides you with the ability to control layout settings for how the control will behave on the form. These properties can be set either at runtime or design time, as long as you set them before the layout is calculated (which occurs just after BeforeFormRegionShow).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5231879" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rgregg/archive/tags/Object+Model/default.aspx">Object Model</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Forms/default.aspx">Forms</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Why does my Outlook event seem to stop working</title><link>http://blogs.msdn.com/rgregg/archive/2007/07/04/why-does-my-outlook-event-seem-to-stop-working.aspx</link><pubDate>Wed, 04 Jul 2007 18:39:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3691097</guid><dc:creator>rgregg</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rgregg/comments/3691097.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rgregg/commentrss.aspx?PostID=3691097</wfw:commentRss><wfw:comment>http://blogs.msdn.com/rgregg/rsscomments.aspx?PostID=3691097</wfw:comment><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/whaggard/"&gt;Wes&lt;/a&gt; has a &lt;a href="http://weblogs.asp.net/whaggard/archive/2007/07/04/why-does-my-outlook-event-seem-to-stop-working.aspx"&gt;good post&lt;/a&gt; over on his blog explaining another common problem that a lot of Outlook solution developers run into:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Imagine&amp;nbsp;we have some code in an Outlook addin that looks similar to code below. Does anyone see anything wrong with it? It simply places a button on the menu bar and shows a message box when the button is clicked. The code works for sometime but then all of a sudden the button mysteriously stops working. What gives?&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;pre&gt;using Office = Microsoft.Office.Core;
using Outlook = Microsoft.Office.Interop.Outlook;
...&lt;/pre&gt;&lt;pre&gt;void SetupCommandBar(Outlook.Application application)
{
    Office.CommandBar menu = &lt;br&gt;       application.ActiveExplorer().CommandBars.ActiveMenuBar;

    Office.CommandBarButton button = menu.Controls.Add(&lt;br&gt;        Office.MsoControlType.msoControlButton,
        Type.Missing, Type.Missing, Type.Missing, true) &lt;br&gt;        as Office.CommandBarButton;

    button.Caption = "Click Me!";
    button.Click += &lt;br&gt;      new Office._CommandBarButtonEvents_ClickEventHandler(button_Click);
}&lt;/pre&gt;&lt;pre&gt;void button_Click(Microsoft.Office.Core.CommandBarButton Ctrl,&lt;br&gt;ref bool CancelDefault)
{
    System.Windows.Forms.MessageBox.Show("Clicked Button!");
}&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;The button stops working due to the mystical powers of the .Net garbage collector. If we look closely we notice that the button object is locally scoped in the SetupCommandBar function, thus once we execute that function the button object is free to be cleaned up. However, until the button object is actually destroyed by the garbage collector the button click event will fire and the button will work. Due to the&amp;nbsp;non-deterministic nature of the garbage collector we have no idea how long the button will work. In my simple testing it seemed to work for a little while but if you want to speed up the process add a call go GC.Collect in the button_Click callback. &lt;/em&gt;
&lt;p&gt;&lt;em&gt;The easiest fix for this problem is to change the scope of the button object to be a&amp;nbsp;member variable of enclosing class. By doing this we ensure that the button object stays alive and works until we are ready for it to stop working.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3691097" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rgregg/archive/tags/Object+Model/default.aspx">Object Model</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Common+Problems/default.aspx">Common Problems</category></item><item><title>Mysterious Errors When Using Form Regions from Managed Code Add-ins</title><link>http://blogs.msdn.com/rgregg/archive/2007/06/21/mysterious-errors-when-using-form-regions-from-managed-code-add-ins.aspx</link><pubDate>Fri, 22 Jun 2007 00:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3448498</guid><dc:creator>rgregg</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/rgregg/comments/3448498.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rgregg/commentrss.aspx?PostID=3448498</wfw:commentRss><wfw:comment>http://blogs.msdn.com/rgregg/rsscomments.aspx?PostID=3448498</wfw:comment><description>&lt;P&gt;I've been noticing some feedback lately where a number of developers were having problems working with the controls on their form region.&amp;nbsp; Usually, these problems manifested as Outlook's object model&amp;nbsp;returning null values back when trying to access the Controls collection of the UserForm object in the Microsoft Forms 2.0 library (which was accessed from the FormRegion.Form property).&lt;/P&gt;
&lt;P&gt;This can be especially frustrating, because it looks like you've done everything right, and Outlook is just giving you back something that is totally wrong. Turns out, that isn't quite the case.&lt;/P&gt;
&lt;P&gt;If you've added a reference to the 'Microsoft Forms 2.0' type library, you might have added the wrong reference to your project.&amp;nbsp;On some computers, you'll find two different listings for the forms type library in the Add Reference dialog:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/AddReferenceDialog%5B7%5D.jpg" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/AddReferenceDialog%5B7%5D.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=197 src="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/AddReferenceDialog_thumb%5B1%5D.jpg" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/AddReferenceDialog_thumb%5B1%5D.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Depending on which reference you select, you'll either get a reference properly associated with the Primary Interop Assembly provided by Office, or you'll get a reference with a Visual Studio generated interop assembly.&amp;nbsp;Unfortuatnely, the VS generated interop assembly incorrectly maps some elements of the type library to elements in the interop assembly.&amp;nbsp; This ultimately means that when you are using this reference, you'll end up calling into a different property or method than your code appears to be calling, which causes various strange exceptions and errors.&lt;/P&gt;
&lt;P align=left&gt;You can easily determine which reference you are using by selecting the reference and looking at the properties of the reference. If you've added the self-generated IA reference, the properties will look like this:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_IncorrectReference%5B9%5D.jpg" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_IncorrectReference%5B9%5D.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=240 src="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_IncorrectReference_thumb%5B5%5D.jpg" width=460 border=0 mce_src="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_IncorrectReference_thumb%5B5%5D.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;Notice that the reference has "Copy Local" set to True, and that the Path is not pointing at the Global Assembly Cache (GAC) but rather to the location of my solution.&amp;nbsp; This indicates that I'm using a self-generated interop assembly, and that I may be running into issues.&lt;/P&gt;
&lt;P align=left&gt;If you've added the correct reference to the PIA, then you'll see properties that look like this instead:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_CorrectReference%5B3%5D.jpg" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_CorrectReference%5B3%5D.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=240 src="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_CorrectReference_thumb%5B1%5D.jpg" width=460 border=0 mce_src="http://blogs.msdn.com/blogfiles/rgregg/WindowsLiveWriter/MysteriousErrorsWhenUsingFormRegionsfrom_F2A2/SolutionExplorer_CorrectReference_thumb%5B1%5D.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=left&gt;This time around, you'll see the Path is pointing into the GAC, and the "Copy Local" property is False. This indicates the PIA is being used, and everything should work normally.&lt;/P&gt;
&lt;P align=left&gt;If you find your project is using the incorrect reference, you should remove the reference and add a new reference.&amp;nbsp; Unforutnately, there is no way to determine which reference is the "right" reference from the Add References dialog.&amp;nbsp; You'll simply need to use trial and error and double check after adding the resource to make sure you've picked the right one.&lt;/P&gt;
&lt;P align=left&gt;&lt;STRONG&gt;The Take-away:&lt;/STRONG&gt; Make sure you are using the right interop assembly when working with custom forms or form regions from your managed code solution.&amp;nbsp; Using the Visual Studio generated interop assembly can cause mysterious errors in your solution that you may not catch right away.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3448498" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rgregg/archive/tags/Object+Model/default.aspx">Object Model</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Forms/default.aspx">Forms</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/debugging/default.aspx">debugging</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Common+Problems/default.aspx">Common Problems</category></item><item><title>PDF Preview Handler for Outlook/Vista</title><link>http://blogs.msdn.com/rgregg/archive/2007/03/17/pdf-preview-handler-for-outlook-vista.aspx</link><pubDate>Sun, 18 Mar 2007 06:29:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1903987</guid><dc:creator>rgregg</dc:creator><slash:comments>22</slash:comments><comments>http://blogs.msdn.com/rgregg/comments/1903987.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rgregg/commentrss.aspx?PostID=1903987</wfw:commentRss><wfw:comment>http://blogs.msdn.com/rgregg/rsscomments.aspx?PostID=1903987</wfw:comment><description>&lt;p&gt;If you're running Windows Vista, or Outlook 2007 on either Vista or Windows XP, you're probably wondering just how long you have to wait until you can use the preview capabilities of your new operation system or Outlook client to view PDF documents.&lt;/p&gt; &lt;p&gt;While I still haven't seen an official solution to the problem from Adobe or any of the other typical PDF reader component companies, I have found a few answers online.&amp;nbsp; There are a couple of different downloads that will solve your problems, depending on the PDF reader you favor.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Foxit: &lt;/strong&gt;Tim Heuer has partnered with Foxit software to create &lt;a href="http://timheuer.com/blog/archive/2007/02/27/14001.aspx"&gt;Foxit PDF Preview Handler&lt;/a&gt;, which works with Foxit Reader.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Acrobat:&lt;/strong&gt; I've created a similar freeware component that works with Adobe Acrobat Reader 7.x or later.&amp;nbsp; If you favor using Adobe Acrobat, take a look at my &lt;a href="http://ryangregg.com/PermaLink,guid,a29ee2d7-6863-4b70-9fcb-b7db392f9a74.aspx"&gt;PDF Preview Handler&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you know of another solution to the problem, add a comment here so other users can find a solution for their PDF previewing problems.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1903987" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rgregg/archive/tags/Preview+Handler/default.aspx">Preview Handler</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/PDF/default.aspx">PDF</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://blogs.msdn.com/rgregg/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>