Доступ к значкам в 64-битном exe с 32-битной программой?

Есть ли способ получить доступ к 64-битным исполняемым файлам с 32-битным приложением? Я использую Delphi 2009 (обновление до XE2 невозможно в денежном выражении прямо сейчас)

Я делаю этот модуль запуска, и при его запуске на 64-битной версии win7 он не выбирает правильные значки для 64-битных приложений, и ShellExecute, похоже, тоже не работает с этими приложениями. Теперь все эти приложения находятся в «C:\program files», что говорит о том, что это вещь WOW64. Я гуглил различные способы временного отключения wow-redirection, но ни один из них не работает.


person Lars Bargmann    schedule 11.07.2012    source источник
comment
C:\Program Files не перенаправляется. Здесь нет WOW64. Если вы используете %ProgramFiles% или получаете эту папку с помощью CSIDL, вы выберете 32-битную папку, C:\Program Files (x86). Какой точный путь используется вашей программой?   -  person David Heffernan    schedule 11.07.2012
comment
Точного пути нет. Я подбираю ярлыки в каталоге для запуска и извлекаю из них значки. Они также подвергаются ShellExecute... но ни одна из частей не работает, если ярлыки указывают на 64-битные приложения...   -  person Lars Bargmann    schedule 11.07.2012
comment
Где-то должна быть дорога. Система не может найти файл без . Пока вы не покажете нам какой-то код и не дадите нам некоторые подробности, мы можем только строить догадки.   -  person David Heffernan    schedule 11.07.2012
comment
C:\Program Files\Oracle\VirtualBox\VirtualBox.exe, C:\Program Files\SpeedProject\SpeedCommander 12\SpeedCommander.exe — две цели в некоторых ярлыках... В них нет ничего странного, чтобы мои глаза ... но ни извлечение значков, ни shellexecute не работают с этими ярлыками ... :-(   -  person Lars Bargmann    schedule 11.07.2012
comment
Ладно, дальше становится не по себе... C:\Program Files\CCleaner\CCleaner64.exe работает... ????   -  person Lars Bargmann    schedule 11.07.2012
comment
Как мы можем вам помочь, если вы отказываетесь рассказать нам, что вы делаете? Показать код. Дайте подробную информацию о режимах отказа, сообщениях об ошибках, кодах ошибок и т. д. Или решите проблему самостоятельно.   -  person David Heffernan    schedule 11.07.2012
comment
Я действительно не отказываюсь что-либо показывать, но это настолько просто, что показывать особо нечего... Делаю ShellExecute по ярлыку (с указанными целями). ShellExecute возвращает 3 (указанный путь не найден), чего я вообще не понимаю...   -  person Lars Bargmann    schedule 11.07.2012
comment
ShellExecute(0, '', PChar(FFilename), '', '', SW_SHOWNORMAL); Я пробовал разные вещи, такие как использование GetDesktopWindow и «открыть», но с теми же результатами. FFilename — это путь+имя файла .lnk   -  person Lars Bargmann    schedule 11.07.2012
comment
@ Дэвид, он не единственный с этой проблемой: forums.embarcadero.com/thread .jspa?messageID=396324 и, возможно, связанные: stackoverflow.com/a/8837838/800214   -  person whosrdaddy    schedule 11.07.2012
comment
@LarsBargmann, есть ли разница при включенном или выключенном UAC?   -  person whosrdaddy    schedule 11.07.2012
comment
Нет, UAC вообще не имеет значения, к сожалению.   -  person Lars Bargmann    schedule 11.07.2012
comment
Пожалуйста, укажите код в вопросе. В комментариях это не читается, да и кто вообще будет копаться в комментариях. Нажмите на кнопку редактирования и отредактируйте вопрос.   -  person David Heffernan    schedule 11.07.2012
comment
Вопросы выглядят так, как будто они связаны: stackoverflow. com/questions/386715/ stackoverflow.com/questions/ 3124332/wow64-woes-lnk-shortcuts и я думаю проблема в том, что ярлык не содержит C:\Program Files, а на самом деле содержит %ProgramFiles%. Оболочка, вероятно, расширяет это, когда отображает его вам, но если вы используете API оболочки для опроса файла .lnk, я уверен, вы увидите подобное косвенное обращение. И на самом деле это именно то, что я постулировал в своем первом комментарии к этому вопросу.   -  person David Heffernan    schedule 11.07.2012
comment
Что касается решения, я бы сказал, что вам лучше всего использовать 64-битное приложение.   -  person David Heffernan    schedule 11.07.2012
comment
Да, я могу воспроизвести то, что вы описываете, создав ярлык, который использует %ProgramFiles%. Тот, кто создал этот ярлык, принял очень плохое решение, и, честно говоря, это основная проблема здесь. Вам просто придется обойти это.   -  person David Heffernan    schedule 11.07.2012
comment
Я думаю, что это немного глубже, чем это, хотя. Я только что попытался создать ярлыки с помощью проводника Windows, и они тоже не работают. Я не проверял, указывает ли сама Windows ярлыки на %programfiles%, потому что, честно говоря, я не знаю, как это сделать. Я никогда не работал с ярлыками, кроме как щелкнуть их правой кнопкой мыши и выбрать свойства :-)   -  person Lars Bargmann    schedule 11.07.2012
comment
Хорошо, с ярлыками довольно просто работать, по-видимому. Я только что попытался разрешить ярлыки с помощью jclShell, и они (как вы подозреваете) возвращают Program Files (x86) в качестве своего пути. Я не вижу %ProgamFiles%, но получаю замененный путь...   -  person Lars Bargmann    schedule 11.07.2012
comment
Да, я могу воспроизвести все это. Должен сказать, я понятия не имею, почему оболочка превращает C:\Program Files в C:\Program Files (x86). Это вообще не имеет для меня никакого смысла. Я бы просто использовал 64-битный лаунчер. Приложение AnyCPU C# отлично справится с этой задачей.   -  person David Heffernan    schedule 11.07.2012
comment
Это действительно странно, но спасибо за всю вашу помощь... на данный момент я сделал очень грязный хак (проверьте, является ли файл ярлыком, разрешите ярлык, если файл не существует, удалите "(x86)" из пути.. , Чрезвычайно грязно, но на самом деле работает... пока...   -  person Lars Bargmann    schedule 11.07.2012