I assume that the batch file resides in the same directory as your program launcher. Determine its location automatically:
string executableDir = Path.GetDirectoryName(Application.ExecutablePath);
Process.Start(Path.Combine(executableDir, "game.bat"));
Where
Application.ExecutablePath is the path of your executable, i.e.
F:\Freak Mind Games\Projects 2013\JustShoot\justshoot.exe.
Path.GetDirectoryName(...) gets the directory part of it, i.e.
F:\Freak Mind Games\Projects 2013\JustShoot.
Path.Combine(executableDir, "game.bat") combines the directory with game.bat, i.e. F:\Freak Mind Games\Projects 2013\JustShoot\game.bat
Keep also in mind that when started from Visual Studio the executable path is "...\bin\Debug" or "...\bin\Release". Therefore you might want to remove these parts from the path if your batch file resides in the project directory.
const string DebugDir = @"\bin\Debug";
const string ReleaseDir = @"\bin\Release";
string executableDir = Path.GetDirectoryName(Application.ExecutablePath);
if (executableDir.EndsWith(DebugDir)) {
executableDir =
executableDir.Substring(0, executableDir.Length - DebugDir.Length);
} else if (executableDir.EndsWith(ReleaseDir)) {
executableDir =
executableDir.Substring(0, executableDir.Length - ReleaseDir.Length);
}
Process.Start(Path.Combine(executableDir, "game.bat"));
UPDATE
It is not a good idea the hard code the directories. Place the paths of the games to be launched in a text file in the same directory as your game launcher (e.g. "launch.txt"). Each line would contain a game that can be launched with the name of the game plus its path. Like this:
Freak Mind Games = F:\Freak Mind Games\Projects 2013\JustShoot\game.bat
Minecraft = C:\Programs\Minecraft\minecraft.exe
Define a directory as variable in your form:
private Dictionary<string,string> _games;
Now get a list of these games like this:
string executableDir = Path.GetDirectoryName(Application.ExecutablePath);
string launchFile = Path.Combine(executableDir, "launch.txt"));
string[] lines = File.ReadAllLines(launchFile);
// Fill the dictionary with the game name as key and the path as value.
_games = lines
.Where(l => l.Contains("="))
.Select(l => l.Split('='))
.ToDictionary(s => s[0].Trim(), s => s[1].Trim());
Then display the game names in a ListBox:
listBox1.AddRange(
_games.Keys
.OrderBy(k => k)
.ToArray()
);
Finally launch the selected game with
string gamePath = _games[listBox1.SelectedItem];
var processStartInfo = new ProcessStartInfo(gamePath);
processStartInfo.WorkingDirectory = Path.GetDirectoryName(gamePath);
Process.Start(processStartInfo);