x86 Program files bei x64
-
WIE startest Du denn den Process?
-
Jochen Kalmbach schrieb:
WIE startest Du denn den Process?
blubby schrieb:
Wie schon oben erwähnt, ich muss innerhalb meiner x86 Anwendung eine Anwendung aufrufen (per CreateProcess), welche im nativen ProgramFiles Ordner liegt.
?
-
Also, hab es jetzt selber probiert: Vista x64-DE.
Folgendes Beispiel geht bei mir problemlos:
int _tmain() { LPTSTR szCmd = _tcsdup(_T("C:\\Program Files\\Microsoft Games\\Chess\\Chess.exe")); STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); PROCESS_INFORMATION pi; BOOL bRet = CreateProcess(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); }Sowohl als x64 als auch als x86!
Also, ich kann Dein Problem nicht ganz nachvollziehen...
-
Mir ging es eigentlich nur darum, "C:\\Program Files\" auf portable Weise (hardcoded sieht das so unschön aus) innerhalb einer x86 applikation auf x64 os'es herauszufinden.
Naja, ich probier mal deine Lösung aus, wenn ich zuhause bin.
Danke
-
Das hatte ich doch geschrieben: FOLDERID_ProgramFilesX64
-
Hmmm... ich hab es eben probiert... es scheint wohl ein Bug zu sein... es liefert FILE_NOT_FOUDN

-
Kann ich bestätigen. Laut Doku sollte bei FOLDERID_ProgramFilesX64 für 32-bit Anwendungen das x64-Verzeichnis zurückgegeben werden.
-
-
Auch dein Gebell ändert nichts an dem Fehlverhalten...
-
Du kannst aber die Umgebungsvariable %ProgramW6432% verwenden!
Zumindest Folgendes Funktioniert bei mir Problemlos:
"%ProgramW6432%\Microsoft Games\Chess\Chess.exe"Also Folgendes geht bei mir als x86 problemlos:
void _tmain() { TCHAR *szCmd = new TCHAR[1024]; DWORD dw = ExpandEnvironmentStrings(_T("%ProgramW6432%\\Microsoft Games\\Chess\\Chess.exe"), szCmd, 1024); STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); PROCESS_INFORMATION pi; BOOL bRet = CreateProcess(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); }