x86 Program files bei x64
-
DWORD oldValue; Wow64DisableWow64FsRedirection(&oldValue); // Do whatever you want // e.g. CreateProcess, SHGetSpecialFolgderPath, ... Wow64RevertWow64FsRedirection(&oldValue);
-
Jochen Kalmbach schrieb:
DWORD oldValue; Wow64DisableWow64FsRedirection(&oldValue); // Do whatever you want // e.g. CreateProcess, SHGetSpecialFolgderPath, ... Wow64RevertWow64FsRedirection(&oldValue);Sorry das ich mich so spät melde, aber das funzt nicht. Es bleibt der x86 Ordner

-
Der "richtigere" Weg ist:
FOLDERID_ProgramFilesX64
Aber das wird Dir nicht sehr viel helfen, weil wenn Du den Pfad verwendest wird wieder der Redirector austomatisch eingreifen
WAS willst Du denn überhaupt damit?
-
Jochen Kalmbach schrieb:
Der "richtigere" Weg ist:
FOLDERID_ProgramFilesX64
Aber das wird Dir nicht sehr viel helfen, weil wenn Du den Pfad verwendest wird wieder der Redirector austomatisch eingreifen
WAS willst Du denn überhaupt damit?
Wie schon oben erwähnt, ich muss innerhalb meiner x86 Anwendung eine Anwendung aufrufen (per CreateProcess), welche im nativen ProgramFiles Ordner liegt.
-
Vielleicht gehts einfacher wenn Du eine Verknüpfung in Deinem x86-Ordner anlegst, Und Du rufst diese Verknüpfung auf?
Nicht sehr elegant, aber einfach umgesetzt
Martin
-
Wär zwar eine Lösung, aber das kann ich leider nicht machen

-
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); }