<?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>Writing it is easy, but how do you fix it?</title><link>http://blogs.msdn.com/zakramer/default.aspx</link><description>Thoughts while troubleshooting problems Microsoft's Developer products in the field.</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Weird RDP Problem on Vista</title><link>http://blogs.msdn.com/zakramer/archive/2008/08/04/weird-rdp-problem-on-vista.aspx</link><pubDate>Mon, 04 Aug 2008 16:17:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8831053</guid><dc:creator>zakramer</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/zakramer/comments/8831053.aspx</comments><wfw:commentRss>http://blogs.msdn.com/zakramer/commentrss.aspx?PostID=8831053</wfw:commentRss><description>&lt;p&gt;So since I am a field based worker here at Microsoft I rely heavily on RDP to access all sorts of things back in the office.&amp;#160; It is an awesome tool that enables me to get a ton done without being in a physical office.&amp;#160; That said on last Friday it broke on my laptop.&amp;#160; I have no idea how it happened but something was horribly wrong.&amp;#160; I tired to connect to a variety of machines and I was getting one of 2 errors:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[Window Title]      &lt;br /&gt;Remote Desktop Disconnected &lt;/p&gt;    &lt;p&gt;[Content]      &lt;br /&gt;The remote session was disconnected because the local computer's client access license could not be upgraded or renewed.       &lt;br /&gt;Please contact the server administrator. &lt;/p&gt;    &lt;p&gt;[OK] [Help]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;or&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[Window Title]      &lt;br /&gt;Remote Desktop Disconnected &lt;/p&gt;    &lt;p&gt;[Content]      &lt;br /&gt;The remote session was disconnected because there was an internal error in the remote computer's licensing protocol. &lt;/p&gt;    &lt;p&gt;[OK] [Help]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This was really wired.&amp;#160; I doubted that this was a problem with the remote computers since it happened on my machine whenever I connected to any remote machine.&amp;#160; I tried all sorts of stuff.&amp;#160; I used the &lt;strong&gt;slbmgr&lt;/strong&gt; script to make sure my Vista license was up to date and it was so that is good.&lt;/p&gt;  &lt;p&gt;I poked around all over the place and found no mention of a problem like this.&amp;#160; Typically these error messages did indeed indicate a problem with the server that people were trying to connect to.&amp;#160; However in those cases almost everyone connecting to the server experienced the problem.&amp;#160; In my case these are heavily used machines that I was trying to connect to so it would be a big deal if no one could connect so I ruled that out.&lt;/p&gt;  &lt;p&gt;After searching around a bit it turned out that there is registry where the Terminal Server/Remote Desktop Licensing is stored:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Store&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is mentioned in several KB articles:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Error message when you try to connect to a remote computer by using Remote Desktop on a Windows XP Professional Edition-based computer: &amp;quot;The remote computer disconnected the session&amp;quot;        &lt;br /&gt;&lt;/strong&gt;&lt;a title="http://support.microsoft.com/kb/921045" href="http://support.microsoft.com/kb/921045"&gt;http://support.microsoft.com/kb/921045&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Removing Terminal Server licenses from an RDP client        &lt;br /&gt;&lt;/strong&gt;&lt;a title="http://support.microsoft.com/kb/187614" href="http://support.microsoft.com/kb/187614"&gt;http://support.microsoft.com/kb/187614&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;How to Use Earlier Versions of Terminal Services Client in Windows XP and Windows Server 2003        &lt;br /&gt;&lt;/strong&gt;&lt;a title="http://support.microsoft.com/kb/320493" href="http://support.microsoft.com/kb/320493"&gt;http://support.microsoft.com/kb/320493&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The first article seems most related to my problem in hindsight but it was targeted at XP.&amp;#160; So from these I took away a couple of things:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;RDP/TS client side license information is cached in the MSLicensing registry and its sub keys &lt;/li&gt;    &lt;li&gt;You need to be an Admin to edit this stuff. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Since I was running out of ideas I figure why not give it a shot.&amp;#160; So I did the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open up REGEDIT &lt;/li&gt;    &lt;li&gt;Navigate to &lt;b&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSLicensing\Store&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;Right click on the MSLicensing Key and Export it just incase things go wrong you can import it back in. &lt;/li&gt;    &lt;li&gt;Delete the Store Key &lt;/li&gt;    &lt;li&gt;Go to the Start Menu and went to &lt;strong&gt;All Programs -&amp;gt; Accessories -&amp;gt; Remote Desktop Connection&lt;/strong&gt; and Right Clicked on it and select &amp;quot;&lt;strong&gt;Run As Administrator&lt;/strong&gt;&amp;quot;. &lt;/li&gt;    &lt;li&gt;Connected to a machine. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;After connecting to a machine the Store key was recreated and then I could connect as normal to RDP machines again.&amp;#160; After this first run as an administrator I no longer needed to run as Admin for my RDP sessions.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; - I tried deleting the key and just reconnecting as a non-admin and I was still getting errors and I presume this was because it could not recreate the needed keys.&lt;/p&gt;  &lt;p&gt;It looks like some how the value in this registry key got corrupted.&amp;#160; I am not really sure how at this point but I am going to look into that a bit more.&amp;#160;&amp;#160;&amp;#160; When looking at these steps please keep a few things in mind:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Ensure this is a client side problem.&amp;#160; If you only have trouble connecting to one machine it is probably not a client side issue. &lt;/li&gt;    &lt;li&gt;Do not do this if you do not know how to edit the registry and back thing up.&amp;#160; Here is the warning that they add in KB articles:      &lt;p&gt;&lt;b&gt;Important&lt;/b&gt; This section, method, or task contains steps that tell you how to modify the registry. However, serious problems might occur if you modify the registry incorrectly. Therefore, make sure that you follow these steps carefully. For added protection, back up the registry before you modify it. Then, you can restore the registry if a problem occurs. For more information about how to back up and restore the registry, click the following article number to view the article in the Microsoft Knowledge Base: &lt;/p&gt;      &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/322756/"&gt;322756&lt;/a&gt; (http://support.microsoft.com/kb/322756/) How to back up and restore the registry in Windows&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;As always this stuff is based on my experience and I just rely to provide some additional information and I cannot guarantee that it will resolve you problem but hopefully the information will help. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Have a great day!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8831053" width="1" height="1"&gt;</description></item><item><title>How does VS 2005 Embed Native Manifest Files</title><link>http://blogs.msdn.com/zakramer/archive/2006/05/22/603558.aspx</link><pubDate>Mon, 22 May 2006 07:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:603558</guid><dc:creator>zakramer</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/zakramer/comments/603558.aspx</comments><wfw:commentRss>http://blogs.msdn.com/zakramer/commentrss.aspx?PostID=603558</wfw:commentRss><description>&lt;P&gt;With VC 2005 the native libraries such as the CRT, MFC, and ATL can now be installed as Side by Side assemblies. These assemblies are installed in the WinSxS directory. This is similar to the GAC but for native code. However when this happens your assemblies that load these libraries will need a manifest. Visual Studio will do this for you by default and if you are doing a Makefile build then you can make the appropriate changes. Nikola (PM for Visual C++) did a great job of outlining the changes that need to be made and what the overall process is doing in his blog: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A HREF="/nikolad/archive/2006/03/23/Example_on_how_change_existing_makefiles_to_embed_manifest.aspx"&gt;Embed manifest with makefiles in VS2005&lt;/A&gt; &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A HREF="/nikolad/articles/425359.aspxhttp:/blogs.msdn.com/nikolad/articles/425359.aspx"&gt;How to embed manifest inside C/C++ binary using makefiles&lt;/A&gt; &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A HREF="/nikolad/archive/2005/06/05/425360.aspx"&gt;Why I see ''Embedding manifest...'' message in Output window?&lt;/A&gt; &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The actual MSDN topic is listed at: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms235591(VS.80).aspx"&gt;How to: Embed a Manifest Inside a C/C++ Application &lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;One note about the MSDN topic on what Visual Studio does (&lt;A href="http://msdn2.microsoft.com/en-us/library/ms235229(VS.80).aspx"&gt;Manifest Generation in Visual Studio&lt;/A&gt;) is that it does not provide any differentiation between the build process with or without incremental linking enabled. The process it describes occurs when incremental linking is enabled, however the process is different without incremental linking. Nikola’s blog entry (&lt;A HREF="/nikolad/archive/2005/06/05/425360.aspx"&gt;Why I see ''Embedding manifest...'' message in Output window?&lt;/A&gt;) does make the distinction and provides some clarity. &lt;/P&gt;
&lt;P&gt;For me it was interesting to understand the different techniques that were used to embed the manifest files and to truly understand this I stepped through each of the command lines. For a Debug build the process goes roughly something like this: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV&gt;Compiler compiles the application and generates the *.obj files. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;An empty manifest file is generated if this is a clean build and if not the previous one is reused. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;The resource compiler (rc.exe) compiles the *.manifest file to a *.res file. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;Linker generates the binary (EXE or DLL) with the /incremental switch and embeds the dummy manifest file. The linker also generates the real manifest file based on the binaries that your binary depends on. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;The manifest tool (mt.exe) is then used to generate the final manifest. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;The resource compiler is invoked one more time. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;Finally, the Linker does another incremental link, but since the only thing that has changed is the *.res file that contains the manifest it is a short link. &lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;How do these steps map to the actual command lines used to create your binary. The build log that Visual studio generates is a great place to start. &lt;/P&gt;
&lt;P&gt;The compiler steps are normal so I will skip those. This leads us to the resource compiler which is generating the resource file from our initial manifest: &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;rc.exe /fo".\Debug\ManifestTest.exe.embed.manifest.res" "Debug\resource.txt"&lt;/FONT&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The file resource.txt contains: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ ".\\Debug\\ManifestTest.exe.embed.manifest"&lt;/FONT&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;NOTE: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;1 – This is the resource ID of the Manifest for an EXE &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;2 – This would be the resource ID of the Manifest for a DLL &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;After the res file is generated the linker is then invoked to generate our binary: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;link.exe &lt;BR&gt;/OUT:"Debug\ManifestTest.exe" &lt;BR&gt;&lt;STRONG&gt;/INCREMENTAL &lt;BR&gt;/MANIFEST &lt;BR&gt;/MANIFESTFILE:"Debug\ManifestTest.exe.intermediate.manifest" &lt;BR&gt;&lt;/STRONG&gt;/DEBUG &lt;BR&gt;/PDB:"debug\ManifestTest.pdb" &lt;BR&gt;/SUBSYSTEM:CONSOLE &lt;BR&gt;/MACHINE:X86 &lt;BR&gt;kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib &lt;BR&gt;".\Debug\ManifestTest.obj"&lt;BR&gt; ".\Debug\stdafx.obj" &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;&lt;BR&gt;".\Debug\ManifestTest.exe.embed.manifest.res"&lt;/FONT&gt; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I highlighted the interesting pieces of the command line in bold. The first one (/INCREMENTAL) enables us to avoid a complete re-link with each minor change. However if something (mt.exe for instance) edits the binary then the linker would be forced to do a full link next time and /INCREMENTAL would no longer help us shorten build time. The next two switches (/MANIFEST and /MANIFESTFILE) tell the linker where to output the manifest file. The final option at the end (".\Debug\ManifestTest.exe.embed.manifest.res") is embedding the resource file that we created. Once the link is complete we will have 2 files that are important: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV&gt;ManifestTest.exe.embed.manifest – The original manifest that we first link into the EXE. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;ManifestTest.exe.intermediate.manifest – This file is generated by the linker and will contain all of the dependencies as determined by the linker. &lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Now it is time to invoke mt.exe: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;mt.exe /out:".\Debug\ManifestTest.exe.embed.manifest" /notify_update /manifest ".\Debug\ManifestTest.exe.intermediate.manifest"&lt;/FONT&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This will process the manifest that was generated by the linker and then will overwrite the file that we started out with if the 2 files are different. You will notice that even though this command is executed each time the output file is only updated if there is a change. Visual Studio will determine if ManifestTest.exe.embed.manifest has changed from the version that we used to generate the original resource. If it has not we stop right here because we used the correct file for the original link. If it has changed then we proceed. &lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Assuming that the manifest has been updated the next setup is the regenerate the resource file and for this we use the exact same command line. &lt;/P&gt;
&lt;P&gt;The final step is to re-link our binary: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;link.exe&lt;BR&gt;/OUT:"Debug\ManifestTest.exe" &lt;BR&gt;/INCREMENTAL &lt;BR&gt;/MANIFEST &lt;BR&gt;/MANIFESTFILE:"Debug\ManifestTest.exe.intermediate.manifest" &lt;BR&gt;/DEBUG &lt;BR&gt;/PDB:"debug\ManifestTest.pdb" &lt;BR&gt;/SUBSYSTEM:CONSOLE &lt;BR&gt;/MACHINE:X86 &lt;BR&gt;kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib&lt;BR&gt;".\Debug\ManifestTest.obj"&lt;BR&gt;".\Debug\stdafx.obj"&lt;BR&gt;".\Debug\ManifestTest.exe.embed.manifest.res" &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This command line is identical to the one that we used above but the only file that has changed is the RES file so the linker will only update the resource part of the binary.&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Why would the manifest file change?&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Above we mention that we do not bother to move forward if the manifest file is unchanged and that begs the question, what would change the manifest file. There are a couple of possibilities that I know of: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;STRONG&gt;&lt;EM&gt;You updated your dependency versions&lt;/EM&gt;&lt;/STRONG&gt; – For instance if you install VS 2005 SP1 there will probably be an update to the CRT files and so if you build after the update you will take a dependency on the newer version. Since the manifest file contains the version of the file you depend on it would get updated. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;STRONG&gt;&lt;EM&gt;Take a new dependency&lt;/EM&gt;&lt;/STRONG&gt; – If your project begins depending on a new file that is loaded from the WinSxS folder using the fusion load then the manifest will be updated. &lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So, it is pretty safe to say that the manifest will be updated infrequently. However moving forward more and more data will be pushed into the manifest file so it may change more frequently in the future. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, that we have looked at the process when increment linking is enabled, what happens if it is not enabled? The process is shorter and the method for embedding the manifest in the binary is different. Before you leveraged an incremental link if the file had changed, in this case we do: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV&gt;Compiler compiles the application and generates the *.obj files. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;Linker generates the binary (EXE or DLL) and the real manifest file based on the binaries that your binary depends on. &lt;/DIV&gt;
&lt;LI&gt;
&lt;DIV&gt;The manifest tool (mt.exe) is then used to generate the final manifest and embeds it directly into the binary. &lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The linker command line is: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;Link.exe&lt;BR&gt;/OUT:"Release\ManifestTest.exe" &lt;BR&gt;/INCREMENTAL:NO &lt;BR&gt;/MANIFEST &lt;BR&gt;/MANIFESTFILE:"Release\ManifestTest.exe.intermediate.manifest"&lt;BR&gt;/PDB:"release\ManifestTest.pdb" &lt;BR&gt;/SUBSYSTEM:CONSOLE &lt;BR&gt;/OPT:REF &lt;BR&gt;/OPT:ICF &lt;BR&gt;/LTCG &lt;BR&gt;/MACHINE:X86 &lt;BR&gt;kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib&lt;BR&gt;".\Release\ManifestTest.obj"&lt;BR&gt;".\Release\stdafx.obj" &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You may have noticed that we are not linking a resource file in at all. This is because the mt.exe tool will take care of this: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;mt.exe /outputresource:"..\release\ManifestTest.exe;#1" /manifest ".\Release\ManifestTest.exe.intermediate.manifest" &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When we invoke mt.exe we use the /outputresource instead of /out in the previous example. This enables mt.exe to embed the resource directly into the binary that the linker just generated. This is great because as you can see we avoid several of the steps above. We are still using the number 1 since this an EXE manifest. If we did a DLL manifest it would be 2. &lt;/P&gt;
&lt;P&gt;One step that is common to both processes that we discuss is the create of mt.dep: &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;@echo Manifest resource last updated at %TIME% on %DATE% &amp;gt; ".\Debug\mt.dep" &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This will simply provide a timestamp for the last we updated the manifest resource. The output looks like: &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 9px; FONT-FAMILY: Courier New"&gt;&lt;FONT size=2&gt;Manifest resource last updated at 23:59:03.65 on Sun 05/21/2006 &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After manually walking through these steps I felt that I had a much better handle on this process and nice idea about what Visual Studio was doing behind the scenes!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=603558" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/zakramer/archive/tags/C_2B002B00_/default.aspx">C++</category></item></channel></rss>