Ik probeer achter de directory "C:\Program Files (x86)" te komen, op mijn x64 systeem. Het lukt echter van geen kanten. Het eerste probleem is dat Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) de directory "C:\Program Files" teruggeeft, en dat is de 64-bits hoek, welke ik niet moet hebben. Strikt genomen klopt het overigens, omdat de assembly is ook 64-bits.
Maargoed, ik dus maar op zoek naar de CPU-architextuur die er bij mij inzit. Het is een AMD64 en het draait op XP x64, dus dat moet je ergens terug kunnen vinden. Twee mogelijkheden:
In de eerste methode wordt de architecture variabele doodleuk met I386 gevuld. Daar klopt volgens mij geen hout van, van zowel het OS als de CPU als de assembly is AMD64 en niet I386.
De tweede methode is nog vreemder. Die geeft MSIL terug. Ja, de calling exe is een .NET exe, maar om dan voor iedere en elke .NET te zeggen dat het MSIL architectuur is. Een beetje lui programmeren, want dat betekent dat die andere mogelijke uitkomsten (Amd64, IA64, X86 en None
) dus nooit teruggegeven zullen worden, want vanuit een native exe kun je deze methode niet aanroepen.
Maargoed, ik denk sowieso niet dat ik me in allerlei bochten moet gaan wringen om een pad op te vragen. Met standaard windows API kan het gewoon, omdat er een ProgramFilesX86 (ofzo) contante voor is. Maar hoe kom je er met C# dan bij...?
Maargoed, ik dus maar op zoek naar de CPU-architextuur die er bij mij inzit. Het is een AMD64 en het draait op XP x64, dus dat moet je ergens terug kunnen vinden. Twee mogelijkheden:
C#:
1
2
3
4
| System.Reflection.PortableExecutableKinds peKind; System.Reflection.ImageFileMachine architecture; System.Reflection.Assembly.GetExecutingAssembly(). GetModules()[0].GetPEKind(out peKind, out architecture); |
C#:
1
2
3
| System.Reflection.ProcessorArchitecture architecture = System.Reflection.Assembly.GetExecutingAssembly(). GetName().ProcessorArchitecture; |
In de eerste methode wordt de architecture variabele doodleuk met I386 gevuld. Daar klopt volgens mij geen hout van, van zowel het OS als de CPU als de assembly is AMD64 en niet I386.
De tweede methode is nog vreemder. Die geeft MSIL terug. Ja, de calling exe is een .NET exe, maar om dan voor iedere en elke .NET te zeggen dat het MSIL architectuur is. Een beetje lui programmeren, want dat betekent dat die andere mogelijke uitkomsten (Amd64, IA64, X86 en None
Maargoed, ik denk sowieso niet dat ik me in allerlei bochten moet gaan wringen om een pad op te vragen. Met standaard windows API kan het gewoon, omdat er een ProgramFilesX86 (ofzo) contante voor is. Maar hoe kom je er met C# dan bij...?
日本!🎌