C#idiomatic C#
ca1839fundamentals/code-analysis/quality-rules

Code analysis

CA1839: Use Environment.ProcessPath instead of Process.GetCurrentProcess().MainModule.FileName

'Environment.ProcessPath' is simpler and faster than 'Process.GetCurrentProcess().MainModule.FileName'.

CA1839 Performance enabled by default in .NET 10: As suggestion
Fix is breaking or non-breaking Non-breakingApplicable languages C# and Visual Basic

Cause

Using Process.GetCurrentProcess().MainModule.FileName for getting the path to the file that launched the process instead of System.Environment.ProcessPath.

Rule description

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName is expensive:

System.Environment.ProcessPath avoids all of these downsides and produces the same information.

How to fix violations

The violation can either be fixed manually, or, in some cases, using Quick Actions to fix code in Visual Studio.

The following two code snippets show a violation of the rule and how to fix it:

csharp
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        string path = Process.GetCurrentProcess().MainModule.FileName; // Violation occurs
    }
}
vb
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = Process.GetCurrentProcess().MainModule.FileName ' Violation occurs.
    End Function
End Class
csharp
using System.Diagnostics;

class MyClass
{
    void MyMethod()
    {
        string path = System.Environment.ProcessPath; // Violation fixed
    }
}
vb
Imports System.Diagnostics

Class MyClass
    Private Sub MyMethod()
        Dim path As String = System.Environment.ProcessPath ' Violation fixed.
    End Function
End Class

When to suppress warnings

It's safe to suppress a violation of this rule if you're not concerned about the performance impact from unnecessary allocation and eventual disposal of the System.Diagnostics.Process and System.Diagnostics.ProcessModule instances.

Suppress a warning

If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.

csharp
#pragma warning disable CA1839
// The code that's violating the rule is on this line.
#pragma warning restore CA1839

To disable the rule for a file, folder, or project, set its severity to none in the configuration file.

ini
[*.{cs,vb}]
dotnet_diagnostic.CA1839.severity = none

For more information, see How to suppress code analysis warnings.

See also