Explicação:
Você tem esse seu aplicativo que cada vez que for executado terá que ter um novo nome. Você não mexe em nada no código dele para fazer isso.

Aí você terá um segundo aplicativo do tipo Console Application denominado Laucher.exe. Os atalhos (Da área de trabalho, menu iniciar e barra de tarefas) para apontar para o Laucher.exe, ao invés do seu aplicativo.

A pasta onde seu software for instalado vai ficar assim:


A pasta Application é onde vai ficar a sua aplicação em si, e o Laucher.exe é o Laucher.

Daí, se tudo estiver conforme essa organização, o código do método Main do Laucher pode ser algo parecido a isso:


Código PHP:
Imports System.Collections
Imports System
.Collections.Generic
Imports System
.Linq
Imports System
.IO
Imports System
.Text.RegularExpressions
Imports System
.Text

Namespace HL
    
Public Module Program
        
Public Sub Main()
            
Dim pastaDoAplicativo As String AppDomain.CurrentDomain.BaseDirectory "\Application"
            
Dim files As String() = Directory.GetFiles(pastaDoAplicativo"*.exe")
            If 
files.Count 0 Then
                Console
.WriteLine("Aplicação não encontrada! Pressione uma tecla para sair")
                
Console.ReadKey()
            Else
                
Dim applicativo As String files(0)
                
Dim appInfo As New FileInfo(applicativo)
                
Dim novoNome As String appInfo.Directory.FullName "\" & Randomizer.RandomWord(15) & ".exe"
                appInfo.MoveTo(novoNome)
                System.Diagnostics.Process.Start(novoNome)
            End If
        End Sub
    End Class
    NotInheritable Class Randomizer
        Private Sub New()
        End Sub
        Shared Sub New()
            listRandom = New Random()
            nextRandom = New Random()
            nextRandomHistory = New ArrayList()
        End Sub
        Private Shared listRandom As Random
        Private Shared nextRandom As Random
        Private Shared nextRandomHistory As ArrayList
        ''' <summary>
        ''' Gera uma lista preencida com números organizados de forma aleatória
        ''' </summary>
        ''' <param name="
min">O número de partida</param>
        ''' <param name="
count">Quantidade de números</param>
        ''' <returns></returns>
        Public Shared Function Random(min As Integer, count As Integer) As IList(Of Integer)
            Dim list As IList(Of Integer) = Enumerable.Range(min, count).OrderBy(Function(r) listRandom.[Next]()).ToList()
            Return list
        End Function
        ''' <summary>
        ''' Gerar um número aleatório único
        ''' </summary>
        ''' <returns>Retorna um número aleatório único nesta instância do aplicativo</returns>
        Public Shared Function [Next]() As Integer
            Dim value As Integer = nextRandom.[Next]()
            While True
                If Not nextRandomHistory.Contains(value) Then
                    nextRandomHistory.Add(value)
                    Return value
                End If
                value = nextRandom.[Next]()
            End While
        End Function
        ''' <summary>
        ''' Gerar uma letra aleatória
        ''' </summary>
        ''' <returns></returns>
        Public Shared Function RandomLetter() As Char
            Return ChrW((New Integer() {nextRandom.[Next](65, 90), nextRandom.[Next](97, 122)})(nextRandom.[Next](0, 2)))
        End Function
        ''' <summary>
        ''' Gerar um número de 0 a 9 aleatóriamente
        ''' </summary>
        ''' <returns></returns>
        Public Shared Function RandomDigit() As Integer
            Return nextRandom.[Next](0, 10)
        End Function
        ''' <summary>
        ''' Gerar um caractere aleatório
        ''' </summary>
        ''' <returns></returns>
        Public Shared Function RandomChar() As Char
            Return ChrW(nextRandom.[Next](1, 256))
        End Function
        ''' <summary>
        ''' Gerar uma palavra com letras aleatórias
        ''' </summary>
        ''' <param name="
charCount">Quantidade de letras</param>
        ''' <returns></returns>
        Public Shared Function RandomWord(charCount As Integer) As String
            Dim str As New StringBuilder()
            Dim previous As Char = ChrW(0)
            For i As Integer = 1 To charCount
                Dim rnd As Char = RandomLetter()
                While True
                    If rnd <> previous Then
                        Exit While
                    End If
                    rnd = RandomLetter()
                End While
                str.Append(rnd)
                previous = rnd
            Next
            Return str.ToString()
        End Function
    End Class

End Namespace 
O atalho do executavel vai abrir esse "launcher" em console que vai gerar um novo nome para o processo do executavel (no caso o main.exe), ou seja, toda vez que for aberto o mesmo vai estar com um processo diferente

Pode ser util ou não, pode evitar um pouco no uso de hacks, pois muitos hacks listam o processo do game em uma ProcessList, ou em uma TextBox que pede o nome do processo do jogo, e toda vez será um nome diferente para o processo, dificulta um pouco mas né...

Pode ser que seja necessário uns ajustes no code, pois foi convertido de C# para .NET, fica ao trabalho de vocês...