Развернуть x86 .exe в «C:\Windows\System32» как в Windows x86, так и в x64?

Я хотел бы, чтобы мой установщик был совместим с обоими окнами x86/x64, это означает переносимость.

Я сделал установщик innosetup только для расширения исполняемого файла x86 CLI, и мне нужно расширить его до каталога C:\windows\system32 даже если установщик работает под Windows x64, потому что в противном случае, если я разверну его в каталог C:\Windows\Syswow64, тогда исполняемый файл не будет распознан под Windows x64 CMD.

Итак, как мне установить это свойство, чтобы сделать его переносимым с указанным выше условием?:

ArchitecturesInstallIn64BitMode= ???

И какие флаги я должен использовать при расширении файла здесь?:

Source: {sys}\My_x86_application.exe; DestDir: {sys}; Flags: ??? 

Я немного поиграл с некоторыми флагами, такими как 32Bit, 64Bit и Is64BitInstallMode, но я не могу получить ожидаемый результат, потому что, если я знаю, что ограниченные константы как {syswow64} вызывают ошибку установки под Windows x86...

ОБНОВИТЬ

Это важная часть моего установочного скрипта, но она неверна, она должна быть совместима с окнами x86 и x64 (portable) и расширять файлы Source: {sys}\* только до C:\Windows\System32 в обоих окнах. (конечно, используя константу {sys} для определения пути к каталогу).

[Setup]
DefaultDirName={pf32}\{#AppName}
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64

[Files]
Source: {app}\*; DestDir: {app}; Flags: ignoreversion
Source: {sys}\*; DestDir: {sys}; Flags: ignoreversion 64bit

person ElektroStudios    schedule 24.11.2014    source источник
comment
но... почему я получаю два отрицательных голоса? Я думаю, что мой вопрос хорошо структурирован и содержит всю необходимую информацию для помощников. хейтеры без причины...   -  person ElektroStudios    schedule 24.11.2014
comment
Вы уверены, что хотите установить 32-битное приложение в 64-битную системную папку? Я вижу, что 64-битная командная строка ее не видит, но для этого и нужна 32-битная. [также не получайте отрицательных голосов; ++]   -  person TLama    schedule 25.11.2014
comment
Да, @TLama, я полностью уверен в том, что хочу сделать, по двум причинам: 1) Как вы знаете, System32 и SysWow64, такие как Program Files(x86) и Program Files, являются каталогами для правильной установки и различения разных архитектур одного и того же приложения, но поскольку мое приложение только x86 (у меня нет такого же приложения, как x64) я не могу вступить в какой-либо конфликт, устанавливая его в каталоге System32, тогда мне не следует беспокоиться о том, какой из обоих каталогов я выбираю для установки моего exe, но здесь идет проблема 2)   -  person ElektroStudios    schedule 25.11.2014
comment
2) CMD не может распознать исполняемый файл. Если я устанавливаю его в Syswow64 (моя переменная среды PATH соответствует значениям по умолчанию), просто мне нужно установить его в каталог System32. Спасибо за комментарий и извините за мой английский.   -  person ElektroStudios    schedule 25.11.2014
comment
В syswow64 много 32-битных исполняемых файлов, и они работают.   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz Верно, но не так: sourceforge.net/projects/mp3gain/files/mp3gain/1.5.2/   -  person ElektroStudios    schedule 27.11.2014
comment
@Elektro - я не вижу в этом ничего особенного. У меня есть mp3gain. Только что попробовал, и он запускается из syswow64, либо из 32-битной cmd, либо из 64-битной cmd. Я понятия не имею, почему вы хотите поместить его в системную папку. Я имею в виду любую системную папку, это не системный файл.   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz, чтобы сэкономить время и автоматизировать некоторые задачи в CMD. Если я добавлю mp3gain.exe в System32, я избегаю расширения mp3gain.exe в другое место, а затем обновляю переменную среды PATH, это просто более чистая установка. у меня не работает mp3gain.exe в папке SysWow64 Если я пытаюсь вызвать его из CMD, я под Windows 8.1 x64   -  person ElektroStudios    schedule 27.11.2014
comment
@Elektro - вам не нужно возиться с переменной системного пути. Все, что вам нужно сделать, это добавить запись реестра в Пути приложений. ... Вот что происходит, если вы спрашиваете о своем решении, а не о своей проблеме. Ваше решение неверно, если заставить его работать, оно не станет правильным. Вы должны спросить, что делать, чтобы иметь возможность запускать программу из командной строки, не вводя полный путь.   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz Аааа! Это кажется очень полезным, 10 лет касаясь Windows, и я не знал этого внутреннего, поэтому я просто предположил, когда спрашивал. но на самом деле это то, что мне нужно для моих намерений?, я добавил это значение reg, но когда я вхожу в CMD и я написал app.exe, приложение не распознается...: [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\app.exe] @="C:\\app.exe" Если это действительно работает, и я пропал что-нибудь тогда пожалуйста напишите ответ, если эта работа я отмечу ее как принятую, спасибо за вашу помощь   -  person ElektroStudios    schedule 27.11.2014
comment
@Elektro - похоже, это не работает напрямую из командной строки, интересно, почему ... Если вы можете использовать start хотя вроде нормально.   -  person Sertac Akyuz    schedule 27.11.2014
comment
@Sertac Akyuz, пожалуйста, посмотрите это: stackoverflow.com/questions/27179818/   -  person ElektroStudios    schedule 28.11.2014
comment
@Электро - Тогда хорошо. Хороший вопрос ИМО.   -  person Sertac Akyuz    schedule 28.11.2014


Ответы (1)


Ответил по частям, как ваш вопрос:

  1. ArchitecturesInstallIn64BitMode

    Допустимые значения: Одно или несколько из следующих, разделенных пробелами:

    • x64
    • ia64

Значение по умолчанию: (пусто)

Описание: Указывает 64-разрядную архитектуру процессора, на которой программа установки должна установить в 64-разрядном режиме. Если эта директива не указана или пуста, программа установки всегда будет устанавливаться в 32-разрядном режиме. Обычно не следует изменять значение этой директивы по умолчанию, если только ваше приложение не содержит собственных 64-разрядных двоичных файлов.

У вас есть двоичный файл x86 exe, поэтому оставьте поле пустым.

  1. Source (обязательно)

Описание: Имя исходного файла. Компилятор добавит путь к исходному каталогу установки, если вы не укажете полное имя пути.

Пример:

Source: "My_x86_application.EXE"

Оставить его без какого-либо пути, как в записи выше, может быть оптимальным (для небольших проектов, потому что это искажает файлы, которые должны быть развернуты с помощью сценария установки). Кроме того, имейте в виду, что константы можно использовать только в том случае, если указан флаг external , поскольку компилятор не выполняет преобразование констант самостоятельно. Итак, следующая запись:

Source: {sys}\My_x86_application.exe; DestDir: {sys}

на самом деле ожидает, что двоичный файл будет храниться в подпапке {sys} каталога со сценарием установки. Если это не так, компиляция завершается ошибкой.

  1. DestDir (обязательно)

Я думаю, что вы можете всегда указывать System32, используя {win}\System32. Поскольку обе версии Windows x86 и x64 содержат каталог System32.

  1. Для получения Flags и дальнейших разъяснений посетите эту страницу.

РЕДАКТИРОВАТЬ: Сохраните файл iss в той же папке, где находится ваш двоичный файл x86 exe. Затем Запустите его.

person Anirban Sarkar    schedule 26.11.2014
comment
You should have gone there in the first place. It's just one google search ("inno setup") away. All sentences in italics are an exact copy from there. Я уже знаю флаги и другие значения, которые вы упомянули, также я знаю (большую часть) описание/детали каждого из них, но Google не говорит, как правильно их комбинировать для этого конкретного сценария. - person ElektroStudios; 26.11.2014
comment
@ElektroStudios Вы пытались запустить установку? В любом случае оставьте флаги по умолчанию. Поскольку у вас возникла проблема с DestDir. - person Anirban Sarkar; 26.11.2014
comment
@Anirban, что это за ответ? Вы только что скопировали/вставили выдержки из документации и размышляете, что она делает. Ваше последнее примечание Вы должны были пойти туда в первую очередь. Это всего лишь один поиск в Google (inno setup), на мой взгляд, грубо. И для чего полезно ваше примечание Вы пытались запустить установку?? Если запустится, то нормально или что? Всегда нужно понимать, что делаешь... - person TLama; 27.11.2014
comment
@Tlama Как вы видите в вашем предыдущем комментарии, если ElectroStudios вообще знала все о флагах, то не осталось ничего, кроме описания. Я также разместил ответы на конкретные вопросы, выведенные из самой документации. Наконец, неправильно ли просить пользователя опробовать решение? - person Anirban Sarkar; 27.11.2014
comment
@Anirban, тогда почему вы консультируетесь, например, с параметром Source? Как это связано с проблемой, заданной здесь? Более того, вы сказали, что оставить его без изменений, без какой-либо константы, как в приведенном выше примере, является оптимальным, поскольку константы могут использоваться только тогда, когда указан внешний флаг, потому что компилятор не выполняет никакой константной трансляции. В чем как это оптимально? - person TLama; 27.11.2014
comment
@Tlama Установщик предполагает путь, по которому он запускается. Таким образом, лучше оставить поле без констант, таких как {sys}, указанных в вопросе. - person Anirban Sarkar; 27.11.2014
comment
@Анирбан, бред. Параметр Source является источником файла, который используется во время компиляции (если вы не укажете флаг external). Это не имеет ничего общего с системой, в которой будет работать установка, и, следовательно, не имеет ничего общего с вопросом. Вы могли бы прочитать это в документации, если упомянули об этом. - person TLama; 27.11.2014
comment
@Tlama Чтобы установочный файл компилировался в папке, отличной от %SystemRoot%\System32. (Я не знаю, где находится источник exe, поэтому я предположил, что он будет где-то кроме System32). Запуск относится к запуску во время компиляции (компилятор запускает сценарии). Выполните компилятор Inno Setup, чтобы узнать. Я думал, ElektroStudios это будет понятно. - person Anirban Sarkar; 27.11.2014
comment
@Anirban, нет, извините, я не буду запускать компилятор :) В любом случае, зачем компилировать установку в системную папку? Или скопировать его туда как пользователь? Тем не менее, параметр Source используется во время компиляции (в данном случае). Этот вопрос касается времени выполнения. - person TLama; 27.11.2014
comment
@Tlama, ваш первый вопрос - это причина, по которой я запретил ElektroStudios использовать {sys} в Source в первую очередь (см. вопрос). Второй — ожидаемый ElektroStudios результат. Однако DestDir создается во время выполнения скомпилированного установщика, поэтому вопрос касается как времени компиляции, так и времени выполнения. - person Anirban Sarkar; 27.11.2014
comment
@Anirban, хорошо, так в каком смысле это оптимально, как ты говоришь? Оптимален ли он тем, что скрипт даже компилируется (поскольку он терпит неудачу, если там используется константа)? - person TLama; 28.11.2014
comment
Организация файлов @Tlama. Я считаю, что лучше хранить файлы одного и того же проекта в одной папке, а не в папке Windows. И скрипт не скомпилируется, он только ожидает, что бинарный exe будет присутствовать в папке Windows (которой там изначально нет, а какая-то другая папка - см. правку.) Когда файл iss запускается из того же папку как exe, Source ожидает найти там exe сам. А так как exe уже есть, то работает! - person Anirban Sarkar; 08.12.2014
comment
@Anirban, если вы не используете флаг external, константа {sys} не будет расширяться до системной папки Windows при использовании в параметре Source (это будет папка с именем {sys}, являющаяся подпапкой папки с вашим скриптом). Итак, на мой вопрос комментария я ожидал ответа, например, это оптимально, потому что вам не нужно иметь подпапку {sys} (папки с вашим скриптом) с развернутыми файлами. Неважно. Я закончил здесь ;-) - person TLama; 12.12.2014
comment
@Tlama В противном случае зачем вам использовать константы, хотя ваш сценарий применим ко всем, кто не установил флаг external. И немного поздно, но совет принят, ответ отредактирован до стандарта. - person Anirban Sarkar; 26.12.2014
comment
@Anirban, я не понимаю ваш последний комментарий, но опять же, нет ничего оптимального в том, чтобы не использовать константы в параметре Source. Они не будут расширяться, пока вы используете флаг external. Если вы используете {sys} в своем исходном пути, то либо у вас есть подпапка {sys} в вашем каталоге развертывания, либо компиляция завершается ошибкой. И если вы серьезно относитесь к развертыванию, вы отделяете сценарии развертывания от файлов, которые должны быть развернуты, поэтому отказ от использования какой-либо структуры папок также не является оптимальным. Но спасибо за обновление! Предложения вроде можно погуглить здесь могут быть восприняты как грубость. - person TLama; 26.12.2014
comment
@Tlama Речь не шла об оптимальности, но разве использование констант без их расширения не противоречит цели их использования в первую очередь? И да, небольшая опечатка в предыдущем... - person Anirban Sarkar; 27.12.2014