Как передать в exe файл значения

Обновлено: 01.07.2024

Как это можно реализовать? Генерировать exe'шник при запросе или каким либо способом в свойствах прописывать данную переменную?

  • Вопрос задан более трёх лет назад
  • 3553 просмотра

Оценить 1 комментарий

Всем спасибо за советы, очень помогли.

Дописывайте строку в конец бинарника, а потом читайте её при запуске. Менять CRC или разбираться в структуре PE файла не требуется.

Грубый пример PHP-скрипта:

Не забудьте добавить другие важные заголовки (Content-Length и пр.).

В программе же надо открыть свой файл на чтение, перейти в конец, найти первый ноль и прочитать строку.

Вы невнимательный! Это не запуск из консоли и получение аргументов, это - скачивание из веба! Я все прекрасно понимаю. Мне скрипт написать? <source><?php header('Content-Type: application/octet-stream'); readfile('game.exe'); echo chr(0) . $_GET['name'];</source> В программе открываем свой exe на чтение, переходим в конец, идём назад в поисках нуля, достаём строку.

Также популярен способ выдачи .msi файла вместо exe. MSI тоже исполняемый под виндой, но в нём зашиты текстовые блоки которые проще изменять "на лету". Но это в любом случае сложней чем первый способ.

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

Есть еще вариант: задать текстовый строковый буфер (константу) с уникальным содержимым, затем выполнять поиск и заменять это содержимое "на лету" на нужное. Лишние символы - 0-ые байты.

afiskon

Если я правильно понял, нужно заменить Laptinius на что-то другое? Тогда делается очень просто. Откройте exe-шник каким-нибудь hex-редактором и найдите смещение этой строки. Перед скачиванием создавайте копию этого файла и по этому смещению пишите другую строку.

Или, чтобы не было проблем с случае обновления exe-шника, используйте не смещение, а сканируйте файл в поисках этой строки. Будет совсем хорошо, если строка будет длинной и уникальной, типа Wai3AhKukaiQuai1.

В тело программы добавьте буфер, который будет хранить внедряемое при скачивании значение, например так:
volatile char external_buffer[MAX_LEN] = ;

При скачивании в тело exe вставляйте нужные данные ( тут два варианта, либо узнать смещение выделенного буфера, либо искать по уникальному его значению ).
Сама же программа сможет просто пользоваться значением переменной.

Это невозможно без "перекомпилирования" файла. Разве-что собирать файл на лету + .manifest

Как вы можете сделать .exe файл доступен из любого места в окне командной строки Windows? Есть ли какая-то запись реестра, которая должна быть введена?

вам нужно убедиться, что exe находится в папке, которая находится на PATH переменные среды.

вы можете сделать это, установив его в папку, которая уже находится на PATH или добавив свою папку в PATH .

вы можете попросить своего установщика сделать это, но вам нужно будет перезагрузить машину, чтобы убедиться, что она будет подобрана.

вы можете добавить следующие разделы ключ:

в этом ключе добавьте строковое значение по умолчанию, содержащее путь к exe-файлу.

вам нужно .exe путь файла в переменную окружения path. Перейдите в "Мой Компьютер - > Свойства - > дополнительно - > переменные среды - > путь" и отредактируйте путь, добавив .exe 's каталог в путь.

другое решение, которое я лично предпочитаю, использует RapidEE для более плавного редактирования переменных.

вместо того, чтобы помещать исполняемый файл в каталог по пути, вы должны создать пакетный файл в каталоге по пути, который запускает программу. Таким образом, вы не отделяете исполняемый файл от его вспомогательных файлов, и вы не добавляете другие вещи в том же каталоге в путь непреднамеренно.

такой пакетный файл может выглядеть так:

Windows 10, 8.1, 8

Откройте меню Пуск,

  1. тип Edit environment variables
  2. откройте параметр Edit the system environment variables
  3. клик
  4. там вы видите две коробки, в System Variables box find path переменная
  5. клик Edit
  6. появляется окно, нажмите New
  7. введите каталог путь .exe или ( каталог значит исключить имя файла из пути)
  8. клик Ok на всех открытых окнах и перезагрузить системуперезапустите командную строку.

удивительно, что нет простого решения для такой простой задачи в windows, Я создал этот маленький скрипт cmd, который вы можете использовать для определения псевдонимов в windows (инструкции находятся в самом заголовке файла):

Это в значительной степени тот же подход, используемый инструментами, такими как NPM или ruby gems для регистрации глобальных команд.

вы также можете постоянно (после перезагрузки) добавлять в путь переменной таким образом:

щелкните правой кнопкой мыши Мой Компьютер -> нажать свойства -> нажать Дополнительные параметры системы -> нажать Переменные Среды

положите его в c:\windows каталог или добавьте свой каталог в "путь" в среде-настройки (Windows-break - tab advanced)

используйте пакетный файл 1 строки в вашей установке:

запустите файл bat

Теперь поместите ваш .exe в c:\windows и ты закончила.

вы можете ввести 'exename' в командной строке и запустить его.

чтобы получить глобальные bash-подобные псевдонимы в Windows для приложений, не добавленных в путь автоматически без ручного добавления каждого из них в путь, вот самое чистое решение, которое я придумал, которое делает наименьшее количество изменений в системе и имеет наибольшую гибкость для последующей настройки:

"Установить" Ваши Псевдонимы Путь

Добавить Свой Псевдоним

открыть в новой оболочке Окно

начать C:\path to\my program.exe , передавая все аргументы, открывая его в новом окне, создайте c:\aliases\my program.bat файл со следующим содержимым (см. команда запуска NT для деталей на commmand старта):

выполнить в текущем окне оболочки

начать C:\path to\my program.exe , передавая все аргументы, но запуская его в том же окне (больше похоже на то, как работает bash) create c:\aliases\my program.bat файл со следующим содержимым:

выполнить в текущем окне оболочки 2

Если вам не нужно приложение, чтобы изменить текущий рабочий каталог вообще для того, чтобы работать, вы можете просто добавить символическую ссылку на исполняемый файл внутри папки псевдонимов:

добавить в путь, шаги ниже (Windows 10):

  1. набрать в строке поиска "окружающая среда. "и выберите Редактировать переменные среды системы, которая открывает окно свойств системы
  2. щелкните Переменные среды. кнопка
  3. на вкладке Переменные среды дважды щелкните переменную Path в разделе системные переменные
  4. добавить путь к папке, содержащей .exe к пути двойным щелчком по пустой строке и вставьте путь.
  5. нажмите ok и выйдите. Открыть новую строку cmd и нажмите команду из любой папки и она должна работать.

другой способ может быть через добавление .LNK к вашему $PATHEX. Затем просто создайте ярлык для исполняемого файла (то есть: yourshortcut.lnk) и поместите его в любой из каталогов, перечисленных в $PATH.

ПРЕДУПРЕЖДЕНИЕ: Знаю что-нибудь .файлы lnk, расположенные в любых каталогах, перечисленных в вашем $PATH, теперь также "PATH'Ed". По этой причине я бы предпочел метод пакетного файла, упомянутый ранее этому методу.

Если кто будет искать после меня вот очень простой способ добавить свой путь.

лучший способ сделать это - просто установить.EXE-файл в папку windows/system32. таким образом, вы можете запустить его из любого места. Это то же самое место, где .exe, как ping, можно найти

Мне нужно передать id и пароль в файл cmd (или bat) во время запуска, а не жестко закодировать их в файл.

вот как выглядит командная строка:

еще один полезный совет-использовать %* означает "все". Например:

вышеуказанный пакетный файл будет запущен:

возможно, синтаксис немного неправильный, но это общая идея.

вот как я это делаю.

вот как выглядит командная строка:

%1 применяется к первому параметру %2 (и вот сложная часть) применяется ко второму. Таким образом, можно передать до 9 параметров.

Если вы хотите грамотно обрабатывать отсутствующие параметры, вы можете сделать что-то вроде:

доступ к параметрам пакета может быть простым с %1, %2, . %Или 9 %*,
но только если содержание простое.

нет простого способа для сложного содержимого, такого как "&"^& , так как невозможно получить доступ к %1 без возникновения ошибки.

линии расширяются до

и каждая строка терпит неудачу, как одна из & вне кавычек.

это можно решить с помощью чтения из временного файла a отметил вариант параметр.

фокус в том, чтобы включить echo on и разверните %1 после rem заявление (работает также с %2 .. %* ).
Так даже "&"& можно было бы повторить, не производя ошибки, как это отмечается.

но иметь возможность перенаправлять вывод echo on , вам нужны два for-loops.

затем чтение параметр rem вывод из файла, но осторожно.
FOR / F должен работать с отложенным расширением, иначе содержимое с "!- будут уничтожены.
После удаления дополнительных символов в param1 вы получили это.

и использовать param1 безопасным способом включите отложенное расширение.

да, и не забудьте использовать переменные типа %%1 при использовании if и for и банды.

нет необходимости усложнять ее. Это просто Команда %1 %2 параметры, например,

"пауза" отображает то, что сделал пакетный файл, и ждет, когда вы нажмете любую клавишу. Сохраните это как xx.bat в папке Windows.

чтобы использовать его, введите, например:

этот пакетный файл заботится обо всех необходимых параметрах, таких как копирование только файлов, которые являются более новыми и т. д. Я использовал его еще до Windows. Если вам нравится видеть имена файлов, поскольку они копируются, не включают

Примечание: если "%1"=="" вызовет проблем, если %1 заключен в кавычки сам.

в этом случае используйте IF [%1]==[] или, в NT 4 (SP6) и выше, .

друг недавно спрашивал меня об этом предмете, поэтому я подумал, что опубликую, как я обрабатываю аргументы командной строки в пакетных файлах.

этот метод имеет немного накладных расходов, как вы увидите, но это делает мои пакетные файлы очень легко понять и быстро реализовать. А также поддержка следующих структур:

С и - компилируемый язык. После сборки программа представляет собой исполняемый файл (мы не рассматриваем создание динамических библиотек, драйверов и т.д.). Наши программы очень простые и не содержат библиотек времени выполнения (Runtime libraries), поэтому могут быть перенесены на компьютер с такой же операционной системой (и подобной архитектурой) и там запущены.

Программа во время запуска может принимать параметры. Они являются аргументами функции main. Общий вид функции main следующий

Первым аргументом argc является число переданных функции параметров. Второй аргумент – массив строк – собственно сами параметры. Так как параметры у функции могут быть любыми, то они передаются как строки, и уже сама программа должна их разбирать и приводить к нужному типу.

Первым аргументом (argv[0]) всегда является имя программы. При этом имя выводится в зависимости от того, откуда была запущена программа.

Первый аргумент - это имя программы

Первый аргумент - это имя программы

Теперь научимся немного работать с командной строкой. Это понадобится для того, чтобы передавать аргументы нашей программе. Сочетание клавиш Win+R вызывает окно "Выполнить". Наберите в нём cmd и вы откроете командную строку. Также можно найти cmd.exe поиском в меню Пуск. В юникс-подобных операционных системах можно вызвать программу "терминал".

Мы не будем изучать сколько-нибудь много команд. Только те, которые понадобятся в работе.

Стандартная для всех операционных систем команда cd осуществляет переход к нужной папке. Существует два зарезервированных имени - . (точка) и .. (две точки). Точка - это имя текущей папки.

никуда не переходит

.. обращение к родительской папке

переход в родительскую папку

Для перехода по нужному пишется cd адрес. Например, нужно перейти на windows в папку C:\Windows\System32

В линуксе если нужно перейти в папку /var/mysql

Если путь содержит пробелы, то он пишется в двойных кавычках

cd "D:\Docuents and Settings\Prolog"

Терминал имеет следующие полезные особенности: если нажать стрелку вверх, по появится предыдущая выполненная команда. Если нажать tab, то терминал попытается дополнить строку до известной ему команды, или дополнить путь, перебирая все папки и файлы в текущей папке.
Наберите cd C:\
нажимайте tab и смотрите, что происходит.

Ещё одна важная команда dir на windows и ls на linux, выводит на консоль содержимое текущей папки (той папки, в которой вы находитесь в данный момент)

Ваша программа вернула своё полное имя. Перейдите в папку, где располагается ваша программа и посмотрите её содержимое

Переходим в папку, в которой располагается наша программа и смотрим содержимое

Переходим в папку, в которой располагается наша программа и смотрим содержимое

Теперь, после того, как мы перешли в нашу папку, можно выполнить нашу программу. Для этого наберите её имя.

Вызов программы из командной строки

Вызов программы из командной строки

Заметьте - имя изменилось. Так как программа вызывается из своей папки, то выводится относительно имя. Теперь изменим программу и сделаем так, чтобы она выводила все аргументы. которые ей переданы.

Соберите проект. Перед сборкой убедитесь, что программа закрыта. Теперь вызовите программу, передав ей разные аргументы. Для этого напишите имя программы и через пробел аргументы

Передача аргументов программе

Передача аргументов программе

Давайте теперь напишем программу, которая получает два аргумента числа и выводит их сумму

Соберём и вызовем

Функция принимает в качестве аргументов два числа

Функция принимает в качестве аргументов два числа

Таким образом работает большинство программ. Кликая на ярлык, вы вызываете программу, на которую он ссылается. Большинство программ также принимают различные аргументы. Например, можно вызвать браузер firefox из командной строки и передать аргументы
firefox.exe "www.mozilla.org" "learnc.info" и он сразу же откроет в двух вкладках сайты по указанным адресам.

Многие стандартные команды также имеют параметры. В windows принято, что они начинаются с прямого слеша, в юниксе с минуса или двух минусов. Например

выводит только папки, а в терминале linux

ls -l выводит все файлы и папки с указанием атрибутов

Для просмотра дополнительных команд windows наберите в командной строке help или смотрите руководство (его легко найти в интернете). Для линукса команд и их опций гораздо больше, а некоторые из них являются самостоятельными языками программирования, так что стоит выучить хотя бы минимальный набор и их опции.

email

Всё ещё не понятно? – пиши вопросы на ящик

Читайте также: