<?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>Visual Basic Frequently Asked Questions : General</title><link>http://blogs.msdn.com/vbfaq/archive/tags/General/default.aspx</link><description>Tags: General</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>How can I run another application or batch file from my Visual Basic .NET code?</title><link>http://blogs.msdn.com/vbfaq/archive/2004/05/30/144573.aspx</link><pubDate>Sun, 30 May 2004 08:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:144573</guid><dc:creator>vbfaq</dc:creator><slash:comments>15</slash:comments><comments>http://blogs.msdn.com/vbfaq/comments/144573.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbfaq/commentrss.aspx?PostID=144573</wfw:commentRss><description>&lt;P&gt;Posted by: &lt;A href="http://weblogs.asp.net/duncanma"&gt;Duncan Mackenzie&lt;/A&gt;, MSDN&lt;BR&gt;&lt;EM&gt;This post applies to Visual Basic .NET 2002/2003&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Suppose you want to run a command line application,&amp;nbsp;open up another Windows program, or even bring up the default web browser or email program... &lt;STRONG&gt;how can you do this from your VB code?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The answer for all of these examples is the same, you can use the classes and methods in &lt;A href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDiagnosticsProcessClassTopic.asp"&gt;System.Diagnostics.Process&lt;/A&gt; to accomplish these tasks and more.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example 1.&lt;/STRONG&gt; Running a command line application, without concern for the results:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Private&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Sub&lt;/SPAN&gt;&lt;SPAN&gt; Button1_Click(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; sender &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Object&lt;/SPAN&gt;&lt;SPAN&gt;, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; e &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.EventArgs) &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Handles&lt;/SPAN&gt;&lt;SPAN&gt; Button1.Click&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Diagnostics.Process.Start(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"C:\listfiles.bat"&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Sub&lt;/SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;Example 2.&lt;/STRONG&gt; Retrieving the results and waiting until the process stops (running the process synchronously):&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Private&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Sub&lt;/SPAN&gt;&lt;SPAN&gt; Button2_Click(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; sender &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Object&lt;/SPAN&gt;&lt;SPAN&gt;, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; e &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.EventArgs) &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Handles&lt;/SPAN&gt;&lt;SPAN&gt; Button2.Click&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; psi &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;New&lt;/SPAN&gt;&lt;SPAN&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; System.Diagnostics.ProcessStartInfo(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"C:\listfiles.bat"&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psi.RedirectStandardOutput = &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;True&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psi.WindowStyle = ProcessWindowStyle.Hidden&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psi.UseShellExecute = &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;False&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; listFiles &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.Diagnostics.Process&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listFiles = System.Diagnostics.Process.Start(psi)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; myOutput &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.IO.StreamReader _&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; = listFiles.StandardOutput&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listFiles.WaitForExit(2000)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;If&lt;/SPAN&gt;&lt;SPAN&gt; listFiles.HasExited &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Then&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; output &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;String&lt;/SPAN&gt;&lt;SPAN&gt; = myOutput.ReadToEnd&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; Debug.WriteLine(output)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;If&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Sub&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;STRONG&gt;Example 3.&lt;/STRONG&gt; Displaying a URL using the default browser on the user's machine:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Private&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Sub&lt;/SPAN&gt;&lt;SPAN&gt; Button3_Click(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; sender &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Object&lt;/SPAN&gt;&lt;SPAN&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; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;ByVal&lt;/SPAN&gt;&lt;SPAN&gt; e &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; System.EventArgs) &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Handles&lt;/SPAN&gt;&lt;SPAN&gt; Button3.Click&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; myTargetURL &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;String&lt;/SPAN&gt;&lt;SPAN&gt; = &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"http://www.duncanmackenzie.net"&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Diagnostics.Process.Start(myTargetURL)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Sub&lt;/SPAN&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;By the way, you are much better off following the third example for URLs, as opposed to executing IE with the URL as an argument. The code shown here will launch the user's default browser, which may or may not be IE; you are more likely to provide the user with the experience they want and&amp;nbsp;you will be taking advantage of the browser that is most likely to have up-to-date connection information.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=144573" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbfaq/archive/tags/General/default.aspx">General</category></item><item><title>How do I determine the difference between two dates?</title><link>http://blogs.msdn.com/vbfaq/archive/2004/05/30/144571.aspx</link><pubDate>Sun, 30 May 2004 08:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:144571</guid><dc:creator>vbfaq</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/vbfaq/comments/144571.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbfaq/commentrss.aspx?PostID=144571</wfw:commentRss><description>&lt;P&gt;Posted by: &lt;A href="http://weblogs.asp.net/duncanma"&gt;Duncan Mackenzie&lt;/A&gt;, MSDN&lt;BR&gt;&lt;EM&gt;This post applies to Visual Basic .NET 2002/2003&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This&amp;nbsp;common question is often phrased as "How do I find the number of hours between two dates?", substituting minutes, seconds, days, or whatever interval you are looking for in the place of 'hours'. Well, in Visual Basic .NET there are two main ways to achieve this result; &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vafctdatediff.asp"&gt;the DateDiff function&lt;/A&gt; or through &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtimespanclasstopic.asp"&gt;the TimeSpan structure&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Both of these methods are equally valid, where they overlap in functionality, but each of them has a couple of unique features.&amp;nbsp; Despite their similar functions, the core difference between the two is that DateDiff is a function, so you need to call it every time you need to retrieve a value, whereas TimeSpan is a structure that is created once and then you just work with its various members as needed.&lt;/P&gt;
&lt;P&gt;Using DateDiff, you call it with different date interval parameters to retrieve the appropriate value:&lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; D1, D2 &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Date&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D1 = &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Date&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #000000; FONT-FAMILY: Courier New"&gt;Now&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; D2 = #11/9/2004#&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #008000; FONT-FAMILY: Courier New"&gt;'DateDiff&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"DateDiff"&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Days"&lt;/SPAN&gt;&lt;SPAN&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; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;DateDiff&lt;/SPAN&gt;&lt;SPAN&gt;(DateInterval.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Day&lt;/SPAN&gt;&lt;SPAN&gt;, D1, D2))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Hours"&lt;/SPAN&gt;&lt;SPAN&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; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;DateDiff&lt;/SPAN&gt;&lt;SPAN&gt;(DateInterval.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Hour&lt;/SPAN&gt;&lt;SPAN&gt;, D1, D2))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Minutes"&lt;/SPAN&gt;&lt;SPAN&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; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;DateDiff&lt;/SPAN&gt;&lt;SPAN&gt;(DateInterval.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Minute&lt;/SPAN&gt;&lt;SPAN&gt;, D1, D2))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Seconds"&lt;/SPAN&gt;&lt;SPAN&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; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;DateDiff&lt;/SPAN&gt;&lt;SPAN&gt;(DateInterval.&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Second&lt;/SPAN&gt;&lt;SPAN&gt;, D1, D2))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine()&lt;/SPAN&gt;&lt;/PRE&gt;&lt;SPAN&gt;Alternatively, a TimeSpan structure can be retrieved as the result of subtracting one date from another, and then querying the various members of that structure.&lt;/SPAN&gt;&lt;PRE&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #008000; FONT-FAMILY: Courier New"&gt;'TimeSpan&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"TimeSpan"&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;Dim&lt;/SPAN&gt;&lt;SPAN&gt; difference &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;As&lt;/SPAN&gt;&lt;SPAN&gt; TimeSpan = D2.Subtract(D1)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Days"&lt;/SPAN&gt;&lt;SPAN&gt;, difference.TotalDays)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Hours"&lt;/SPAN&gt;&lt;SPAN&gt;, difference.TotalHours)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Minutes"&lt;/SPAN&gt;&lt;SPAN&gt;, difference.TotalMinutes)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: 400; FONT-SIZE: 12px; COLOR: #ff0000; FONT-FAMILY: Courier New"&gt;"{0} Seconds"&lt;/SPAN&gt;&lt;SPAN&gt;, difference.TotalSeconds)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine()&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;The output of the two different methods is nearly identical, except that the TimeSpan properties are returning Doubles, while DateDiff always returns Longs (Int64).&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;DateDiff&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;175 Days&lt;BR&gt;4222 Hours&lt;BR&gt;253345 Minutes&lt;BR&gt;15200730 Seconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;TimeSpan&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;175.934383644387 Days&lt;BR&gt;4222.42520746528 Hours&lt;BR&gt;253345.512447917 Minutes&lt;BR&gt;15200730.746875 Seconds&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The fractional values returned from the TimeSpan properties are more meaningful that they might seem at first glance; each of these properties is returning the complete difference between the two dates, whereas the whole numbers returned from DateDiff only provide a value to within one interval (day, hour, etc&amp;#8230;). Using only one of these properties from TimeSpan, it would be possible to figure out any other time interval (with varying degrees of precision, of course), although that calculation would seldom be required in practice.&lt;/P&gt;
&lt;P&gt;The TimeSpan structure provides additional members (.Hours, .Days, etc...) that return values closer to what you see from DateDiff, so you can use those if it is more suitable for your situation. While TimeSpan can appear to have more features and to be more efficient,&amp;nbsp;DateDiff has two benefits that may cause you to continue to use it in your Visual Basic .NET applications:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;It&amp;nbsp;provides several date intervals that are not covered by TimeSpan, including Weeks and Quarters, and 
&lt;LI&gt;It is compatible with the VB6 function of the same name, allowing you to more easily reuse existing code.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Read the corresponding documentation for more information, but I hope that this has been helpful...&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vafctdatediff.asp"&gt;DateDiff&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtimespanclasstopic.asp"&gt;TimeSpan&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;BR&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=144571" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbfaq/archive/tags/Language/default.aspx">Language</category><category domain="http://blogs.msdn.com/vbfaq/archive/tags/General/default.aspx">General</category></item><item><title>Can I run Visual Basic 6.0 and Visual Basic .NET on the same machine?</title><link>http://blogs.msdn.com/vbfaq/archive/2004/04/26/120607.aspx</link><pubDate>Mon, 26 Apr 2004 21:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:120607</guid><dc:creator>vbfaq</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/vbfaq/comments/120607.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbfaq/commentrss.aspx?PostID=120607</wfw:commentRss><description>&lt;P&gt;Posted by: &lt;A href="http://weblogs.asp.net/duncanma"&gt;Duncan Mackenzie&lt;/A&gt;, MSDN&lt;BR&gt;&lt;EM&gt;This post applies to Visual Basic .NET 2002/2003 and Visual Basic 6.0&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;J. Henshaw asks "Is it possible to run both VB6 and VB.Net on the same machine,or do I have to remove VB6 to be able to use VB.NET", and the answer is a definite &lt;STRONG&gt;yes&lt;/STRONG&gt;. You can run them both on the same machine.&lt;/P&gt;
&lt;P&gt;Many people, including myself, run VB6 on the same machine as their installation of Visual Basic .NET. If you look at &lt;A href="http://support.microsoft.com/default.aspx?scid=kb;en-us;311324"&gt;this KB article from Microsoft Support&lt;/A&gt;, you will even see that it recommended to run VB6 and VB.NET on the same machine when upgrading projects from one to another.&lt;/P&gt;
&lt;P&gt;For more information on moving from VB6 to VB.NET, check out &lt;A href="http://msdn.microsoft.com/vbasic/using/migrating/default.aspx"&gt;this page&lt;/A&gt; from the Visual Basic Developer Center.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=120607" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbfaq/archive/tags/General/default.aspx">General</category></item><item><title>Does the .NET Framework include an equivalent for [Insert Win32 API function here]?</title><link>http://blogs.msdn.com/vbfaq/archive/2004/04/22/118153.aspx</link><pubDate>Thu, 22 Apr 2004 13:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:118153</guid><dc:creator>vbfaq</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/vbfaq/comments/118153.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbfaq/commentrss.aspx?PostID=118153</wfw:commentRss><description>&lt;P&gt;Posted by: &lt;A href="http://www.philweber.com/"&gt;Phil Weber&lt;/A&gt;, VB &lt;A href="http://mvp.support.microsoft.com/default.aspx?scid=fh;EN-US;mvpintro"&gt;MVP&lt;/A&gt;&lt;BR&gt;&lt;EM&gt;This post applies to Visual Basic .NET 2002/2003/2005&lt;/EM&gt;&lt;/P&gt;Judging by the questions I see in online discussion forums, many VB developers are not yet aware of this article, which lists Win32 API functions and their .NET equivalents: &lt;A href="http://msdn.microsoft.com/library/en-us/dndotnet/html/win32map.asp"&gt;http://msdn.microsoft.com/library/en-us/dndotnet/html/win32map.asp&lt;/A&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=118153" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbfaq/archive/tags/General/default.aspx">General</category></item><item><title>XML Documentation?</title><link>http://blogs.msdn.com/vbfaq/archive/2004/04/20/116581.aspx</link><pubDate>Tue, 20 Apr 2004 07:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:116581</guid><dc:creator>vbfaq</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/vbfaq/comments/116581.aspx</comments><wfw:commentRss>http://blogs.msdn.com/vbfaq/commentrss.aspx?PostID=116581</wfw:commentRss><description>&lt;P&gt;Posted by: &lt;A href="http://www.philweber.com/"&gt;Phil Weber&lt;/A&gt;, VB &lt;A href="http://mvp.support.microsoft.com/default.aspx?scid=fh;EN-US;mvpintro"&gt;MVP&lt;/A&gt;&lt;BR /&gt;&lt;EM&gt;This post applies to Visual Basic .NET 2002/2003/2005&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.aliparvaresh.com/"&gt;Ali Parvaresh&lt;/A&gt; asks:
&lt;BLOCKQUOTE&gt;
How can I document VB.NET source codes like what you do for C#?
&lt;/BLOCKQUOTE&gt;
&lt;/P&gt;
&lt;P&gt;This is another feature scheduled for Visual Basic .NET 2005 (ref &lt;A href="http://panopticoncentral.net/archive/2003/11/08/239.aspx"&gt;http://panopticoncentral.net/archive/2003/11/08/239.aspx&lt;/A&gt;). In the meantime, however, there are a number of &lt;A href="http://www.google.com/search?q=vb.net+xml+documentation"&gt;third-party tools&lt;/A&gt; which add this capability to VB.NET 2002/2003. One popular (and free) alternative is the &lt;A href="http://www.gotdotnet.com/Community/Workspaces/viewUploads.aspx?id=112b5449-f702-46e2-87fa-86bdf39a17dd"&gt;VBCommenter PowerToy&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=116581" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/vbfaq/archive/tags/General/default.aspx">General</category><category domain="http://blogs.msdn.com/vbfaq/archive/tags/Visual+Basic+2005+_2800_Whidbey_2900_/default.aspx">Visual Basic 2005 (Whidbey)</category></item></channel></rss>