(view source code of checkpath.cs as plain text)
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Management;
using System.Windows.Forms;
namespace RobvanderWoude{internal class CheckPath
{static string progver = "1.00";
static int Main( string[] args )
{ #region Parse Command Line // Only 3 valid arguments are checked, invalid arguments are ignoredif ( args.Contains( "/?", StringComparer.InvariantCultureIgnoreCase ) )
{return ShowHelp( );
}bool quiet = args.Contains( "/quiet", StringComparer.InvariantCultureIgnoreCase ) || args.Contains( "/q", StringComparer.InvariantCultureIgnoreCase );
bool verbose = args.Contains( "/verbose", StringComparer.InvariantCultureIgnoreCase ) || args.Contains( "/v", StringComparer.InvariantCultureIgnoreCase );
#endregion Parse Command Line #region Initialize Variables ConsoleColor fgcolor;string[] PATH;
int errors = 0;
int notexist = 0;
int empty = 0;
#endregion Initialize Variables #region System PATHConsole.WriteLine( );
Console.WriteLine( "System PATH" );
Console.WriteLine( "===========" );
string query = @"SELECT * FROM Win32_Environment WHERE Name='PATH' AND SystemVariable=TRUE";
ManagementObjectSearcher searcher = new ManagementObjectSearcher( "root\\CIMV2", query );
ManagementObjectCollection colItems = searcher.Get( );
foreach ( ManagementObject item in colItems )
{if ( verbose )
{Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine( "PATH={0}", item["VariableValue"] );
Console.ResetColor( );
Console.WriteLine( );
}PATH = item["VariableValue"].ToString( ).Split( ';' );
foreach ( string folder in PATH )
{if ( string.IsNullOrWhiteSpace( folder ) )
{Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine( "<empty>" );
Console.ResetColor( );
errors++; empty++; } else {if ( Directory.Exists( Environment.ExpandEnvironmentVariables( folder ) ) )
{fgcolor = ConsoleColor.Green;
} else {fgcolor = ConsoleColor.Red;
errors++; notexist++; }Console.ForegroundColor = fgcolor;
Console.WriteLine( folder );
} }Console.ResetColor( );
}Console.WriteLine( );
#endregion System PATH #region User PATHConsole.WriteLine( );
Console.WriteLine( "User PATH" );
Console.WriteLine( "=========" );
query = string.Format( @"SELECT * FROM Win32_Environment WHERE Name='PATH' AND UserName='{0}\\{1}'", Environment.GetEnvironmentVariable( "ComputerName" ), Environment.UserName );
searcher = new ManagementObjectSearcher( "root\\CIMV2", query );
colItems = searcher.Get( );
foreach ( ManagementObject item in colItems )
{if ( verbose )
{Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine( "PATH={0}", item["VariableValue"] );
Console.ResetColor( );
Console.WriteLine( );
}PATH = item["VariableValue"].ToString( ).Split( ';' );
foreach ( string folder in PATH )
{if ( string.IsNullOrWhiteSpace( folder ) )
{Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine( "<empty>" );
Console.ResetColor( );
errors++; empty++; } else {if ( Directory.Exists( Environment.ExpandEnvironmentVariables( folder ) ) )
{fgcolor = ConsoleColor.Green;
} else {fgcolor = ConsoleColor.Red;
errors++; notexist++; }Console.ForegroundColor = fgcolor;
Console.WriteLine( folder );
} }Console.ResetColor( );
}Console.WriteLine( );
#endregion User PATH #region Error Warningif ( verbose)
{if ( empty > 0)
{fgcolor = ConsoleColor.Red;
} else {fgcolor= ConsoleColor.Green;
}Console.ForegroundColor = fgcolor;
Console.Write( "\n{0} empty", empty );
Console.ResetColor( );
Console.Write( " and " );
if ( notexist > 0 )
{fgcolor = ConsoleColor.Red;
} else {fgcolor = ConsoleColor.Green;
}Console.ForegroundColor = fgcolor;
Console.Write( "{0} non existing", notexist );
Console.ResetColor( );
Console.WriteLine( " PATH entries were found.\n" );
}if ( !quiet && errors > 0 )
{string message = string.Empty;
if ( empty > 0 && notexist == 0 )
{message = string.Format( "{0} empty PATH entr{1} found.", empty, ( empty == 1 ? "y was" : "ies were" ) );
}else if ( empty == 0 && notexist > 0 )
{message = string.Format( "{0} non existing PATH entr{1} found.", notexist, ( notexist == 1 ? "y was" : "ies were" ) );
} else {message = string.Format( "{0} empty and {1} non existing PATH entries were found.", empty, notexist );
}message += "\n\nIn the \"System Properties\" window, \"Advanced\" tab, click the \"Environment ";
message += string.Format( "Variables\" button and correct the error{0}", ( errors == 1 ? "" : "s" ) );
string title = string.Format( "Correct {0} error{1}", errors, ( errors == 1 ? "" : "s" ) );
DialogResult answer = MessageBox.Show( message, title, MessageBoxButtons.OKCancel, MessageBoxIcon.Error );
if ( answer == DialogResult.OK )
{ try {Process.Start( "SystemPropertiesAdvanced.exe" ).WaitForExit( );
}catch ( Exception )
{ // With RunDLL32 we don't WaitForExit, as it exits immediately after launching the Control Panel appletProcess.Start( "RunDLL32.exe", "Shell32.dll,Control_RunDLL SYSDM.CPL,@0,3" );
} } } #endregion Error Warningreturn errors;
}static int ShowHelp( params string[] errmsg )
{ #region Error Messageif ( errmsg.Length > 0 )
{List<string> errargs = new List<string>( errmsg );
errargs.RemoveAt( 0 );
Console.Error.WriteLine( );
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.Write( "ERROR:\t" );
Console.ForegroundColor = ConsoleColor.White;
Console.Error.WriteLine( errmsg[0], errargs.ToArray( ) );
Console.ResetColor( );
} #endregion Error Message #region Help Text /* CheckPath.exe, Version 1.00 Check if all directories in the PATH variable(s) really exist Usage: CheckPath.exe [ /Quiet ] [ /Verbose ] [ /? ] Where: /Quiet skips the popup message when errors are found /Verbose shows extra information, i.e. full PATH variables /? shows this help screen Notes: Each directory in the System PATH and the User PATH will be checked. If it exists, its name is displayed in green, otherwise in red. A counter keeps track of errors, i.e. empty PATH entries as well as directories that don't exist, and its count is used as the program's return code. Unless the /Quiet switch is used, a popup message will show the number of errors detected, if any, and explain how to correct this. If "OK" is clicked, the "System Properties" settings window's "Advanced" tab is opened: click its "Environment Variables" button and correct the errors. If "Cancel" is clicked, no settings window is opened, and the program terminates. Written by Rob van der Woude https://www.robvanderwoude.com */Console.Error.WriteLine( );
Console.Error.WriteLine( "CheckPath.exe, Version {0}", progver );
Console.Error.WriteLine( "Check if all directories in the PATH variable(s) really exist" );
Console.Error.WriteLine( );
Console.Error.Write( "Usage: " );
Console.ForegroundColor = ConsoleColor.White;
Console.Error.WriteLine( "CheckPath.exe [ /Quiet ] [ /Verbose ] [ /? ]" );
Console.ResetColor( );
Console.Error.WriteLine( );
Console.Error.Write( "Where: " );
Console.ForegroundColor = ConsoleColor.White;
Console.Error.Write( "/Q" );
Console.ResetColor( );
Console.Error.WriteLine( "uiet skips the popup message when errors are found" );
Console.ForegroundColor = ConsoleColor.White;
Console.Error.Write( " /V" );
Console.ResetColor( );
Console.Error.WriteLine( "erbose shows extra information, i.e. full PATH variables" );
Console.ForegroundColor = ConsoleColor.White;
Console.Error.Write( " /?" );
Console.ResetColor( );
Console.Error.WriteLine( " shows this help screen" );
Console.Error.WriteLine( );
Console.Error.WriteLine( "Notes: Each directory in the System PATH and the User PATH will be checked." );
Console.Error.Write( " If it exists, its name is displayed in " );
Console.ForegroundColor = ConsoleColor.Green;
Console.Error.Write( "green" );
Console.ResetColor( );
Console.Error.Write( ", otherwise in " );
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.Write( "red" );
Console.ResetColor( );
Console.Error.WriteLine( "." );
Console.Error.WriteLine( " A counter keeps track of errors, i.e. empty PATH entries as well as" );
Console.Error.WriteLine( " directories that don't exist, and its count is used as the program's" );
Console.Error.WriteLine( " return code." );
Console.Error.Write( " Unless the " );
Console.ForegroundColor = ConsoleColor.White;
Console.Error.Write( "/Q" );
Console.ResetColor( );
Console.Error.WriteLine( "uiet switch is used, a popup message will show the number" );
Console.Error.WriteLine( " of errors detected, if any, and explain how to correct this." );
Console.Error.WriteLine( " If \"OK\" is clicked, the \"System Properties\" settings window's" );
Console.Error.WriteLine( " \"Advanced\" tab is opened: click its \"Environment Variables\" button and" );
Console.Error.WriteLine( " correct the errors. If \"Cancel\" is clicked, no settings window is" );
Console.Error.WriteLine( " opened, and the program terminates." );
Console.Error.WriteLine( );
Console.Error.WriteLine( "Written by Rob van der Woude" );
Console.Error.WriteLine( "https://www.robvanderwoude.com" );
#endregion Help Textreturn -1;
} }}page last modified: 2025-10-11; loaded in 0.0102 seconds