Директивы компилятора оцениваются во время компиляции (отсюда и директивы компилятора). Таким образом, полученный .exe всегда будет указывать платформу, на которой он был скомпилирован, а не ту, на которой он запущен. Кроме того, директивы Delphi-Compiler не определяются таким образом для языка Prism / Oxygene.
Способ получения ОС, на которой вы работаете, несколько сложен (например, есть несколько значений, указывающих, что вы в UNIX), но не слишком сложен.
Первое место, куда нужно пойти - System.Environment.OSVersion.Platform
.
Это перечисление определяет следующие значения в .NET 2.0: Win32S, Win32Windows, Win32NT, WinCE, Unix, Xbox, MacOSX
. MacOS имеет свое значение, в то время как Linux и другие системы Unixoid разделяют значение Unix.
Mono также определяет другие значения (см. Запись FAQ по Mono при определении платформы).
Редактировать: Один из возможных способов будет:
var os: string := if Environment.OSVersion.Platform = System.PlatformID.Unix then
'Linux/Unix'
else if Environment.OSVersion.Platform = System.PlatformID.MacOSX then
'Mac OS X'
else
'Windows';